Yükseltme kapasitesi koruyarak satıcının kodunun nispeten ağır değişiklik kolaylaştırmak için bazı stratejiler nelerdir?

4 Cevap php

Ben devam eden misyon uygulanması, genişleme, ve bizim yüksek trafikli sitenin içerik yönetim sistemi bakım bir proje üzerinde kurşun geliştirici duyuyorum. CMS içi bir çözüm, ne de bir açık kaynak projesi değildir - bu bir satıcıdan alınan pahalı bir üründür. Ne yazık ki, çok ... biz diyelim ... enterprisey ürün.

Uzun bir geri-hikaye kısa yapmak için kendi teslim durumda ürün sadece şirketin teknik gereksinimlerini karşılamak vermedi. Saticimizla çekirdek ürünü değişen ve kolayca yeni sürümlerine yükseltme yeteneğini kaybetmeden iş gereklerini yerine getirmek için özgürce değiştirebilir kod temeli bir kısmını belirlenen; Ancak, çekirdek ürünün kod temeli doğası (çok sıkı bağlama, hiçbir DI, her yerde tekil, "sihirli" bir sürü), "Bizim garanti işeme" olmadan bizim gereklerini yerine (ve onların hataları düzeltmek) için hiçbir şekilde sadece yoktu, tabiri caizse, ve çekirdek uygulama uzakta hack.

Bu nedenle, esas itibarıyla:

  1. Bu ürünün biz çekirdek sistem uzakta hack olmadan çalışması gereken şekilde çalışmak yapamazsınız.
  2. Biz sorunsuz satıcının ürünün yeni sürümlerine yükseltmek için yeteneğimizi ödün vermeden çekirdek sistem uzakta kesmek olamaz.
  3. Biz ürün ile sıkışmış ve yükseltme kapasitesi terk edemez.
  4. GOTO 1

Biz muhtemelen bu ikilemle karşı karşıya olan tek takım ... hala zaman geçtikçe yeni sürümlerine yükseltme mümkün olurken ihtiyaçlarını karşılamak için üçüncü parti kodunu değiştirmek için geçmişte kullanılan bazı stratejiler nelerdir olamaz?

Ne ben bugüne kadar yaptığım şudur:

  1. Değişti davranış - (üstlenmeden pratik bir miktar olmadan ve çoğu zaman mümkün değildir, mümkün olduğunda) birim testleri oluşturun.
  2. Mümkün olduğunda, mümkün olduğunca kod temeli belirlenen "müşteri alan" modifikasyon kadar yapın.
  3. Bir SVN vendor branch yeni sürümleri birleştirmek için kullanılacak ilk, değiştirilmemiş uygulama düzenlendi.

Satıcı dalları yalnızca biz uygulamak için hangi değişiklikleri bilmek garanti olacaktır, ancak biz karşılaşmak olasıdır çatışmaların kabus ile bize hiç yardımcı olmayacaktır.

Başka ne, bir şey varsa, biz daha sonra ağrıyı hafifletmek için şimdi ne yapabilirsiniz?

4 Cevap

Inanmayarak ile alın. Bu ben istediğim ne cehennem yapmak için tam siyasi dokunulmazlığın vardı ideal bir durum içinde, ne olacağını sadece budur:

  1. GIT SVN hemen Anahtarı
  2. değiştirilmemiş, orijinal kodu TEMİZ adında bir şube kurmak.
  3. değiştirilmiş kodu olan şube adlı EKINI kurmak.
  4. yükseltmek için gittiğinizde, TEMİZ geçiş yeni sürümü ile eski sürümü benzetecek.
  5. şube PATCH geçmek, çatışmaların kontrol etmek için diff ve PATCH içine TEMİZ birleştirme.
  6. Onlar bu kadar para harcanan kendi ürün hataları düzeltmek o gürültüyle talep ediyoruz. Onlara yamaları gönderin. Kesinlikle samimi ve kibar, ama kalıcı olmak.

sürüm kontrol sistemleri anahtarlama küçük bir şey gibi görünebilir, ancak dallanma ve birleştirme svn ile daha git ile çok daha kolay olduğunu, anahtarlama harcanan zaman yatırım aksi aracılığıyla hattı ile tarama hattı üzerinde harcanan kaydetmek zaman çok hızlı bir şekilde telafi edilecektir çatışma dosyaları ve belirsiz birleştirme komutları hatırlayarak. Ben SVN ile böyle bir sorun alarak hayal olmaz, düşünce bana kalp çarpıntısı verir.

Anabilgisayarlara eski kötü günlerde, bu yaygın bir durumdu. OS Site gereksinimlerini karşılamak için kesmek gerekiyordu. Ama yamalar yayınladı asla OS satıcı, sadece yerel site yamaları kokan diffed gerekiyordu yepyeni bir işletim sistemi yayımladı.

Benim bilgi için, daha iyi bir çözüm yoktu. Bir sürüm çıktı sonra bilgisayar merkezleri personel OS yama için adanmış.

Ben önerebilirsiniz tüm don't upgrade umutsuzca bir sürüm gerekli bir şey olmadıkça olmasıdır. Hatta daha sonra, kendi kaynak kodu depoya her satıcı revizyon yönetmek size değişen yamalı ve ihtiyaç var hangi modüllerin belirlenmesi için uzun bir yol gider. Eğer üretmek deltalar gelen bir yama çoğunlukla yeni sürümleri için otomatik olabilir.

Bu overkill olabilir, ama you could keep each "feature" you add in a seperate branch too. Her dal (+ bağımlı dalları) kendi başına çalışır emin olun. Bir zamanlar onlar da birlikte çalışmak ve size "inşa" nasıl olduğunu görmek için hepsini bir araya birleştirmek ise herkes.

Bu şekilde, bir yükseltme size her şube üzerine kendi (+ bağımlılıkları) çalışması gerektiğini bilmek yapmak için daha küçük, daha kontrollü birleştirmelerini bir dizi var geldiğinde. Ayrıca ilk daha alt düzeyde özellikleri eklemek bağımlılık ağacının bu tür var ve belki vb yolunuzu kadar çalışır.

o---o------ Vendor Base V  -------o
     \                          
      o--- V + Feature A ---o---o---o
       \
        o--- V + Feature B ---o---o---o
                               \
                                o--- V + B + Feature C ---o

Şey, evet. Bu sadece gerçekten küçük parçalar halinde süreç aşağı kırma hakkında bir fikir oldu. Bu şekilde de bir yükseltme aynı anda birkaç kişi çalışmak daha kolay olurdu - herkes mantıklı ve daha kolay olacak gibi evet, ben duno, sadece hissediyor, test etmek için kendi "özellikleri" vardır ve.

Ben bu orada en DCVS (Git, Mercurial, Bazaar) ile yapmak için ok olması gerektiğine inanıyoruz. Aslında çoğu bu tür projelerin teşvik düşünüyorum. Svn muhtemelen gerçekten bunun için biçilmiş kaftan değildir. (?)

(Ama tabii, biliyorum: Gizlice de kendi CMS inşa etmek ve daha sonra :) geçmek

Maliyetleri takip edin. Bir noktada alternatif bir CMS geçiş aslında bir maliyet düşürücü tedbir olduğunu yönetim için iyi bir tanıtım yapmak mümkün olabilir. Kesinlikle sadece sitenizin bir alt kümesi için olsa bile, bu durumdan nasıl göç düşünmek istiyorum.