Kimse henüz iki ucu keskin kılıçtan bahsetmedi, bu yüzden 2 sent ekleyeceğim. Birden fazla projeniz varsa ve hepsi iyi programlama uygulamalarına / ilkelerine (örneğin KURU) göre yeniden kullanılabilir bazı kodları paylaşıyorsa, kodu tek bir global yere yerleştirmeli ve herkes tarafından paylaşılabilecek şekilde yapılandırmalısınız. herhangi bir değişiklik yapmadan projeleriniz. Başka bir deyişle, arayüzleri genel ve herkese uyacak kadar yaygın olacak şekilde tanımlayın.
Bunu yapmak için birkaç seçenek vardır: 1) Başkalarının dayandığı bir temel proje oluşturun. Bu proje, diğer projelerin tükettiği bir ikili dağıtım oluşturabilir. 2) Kuruluşunuzda açık kaynaklı bir model çekin. Ortak kod kendi kod dalı olmak ve diğer projelerin kod herhangi bir çevrimiçi OSS kaynak kodu alacağınız şekilde çekmek var.
Şimdi kılıç burada devreye giriyor ...
Kodu diğer projelerin / insanların bağımlı olduğu ortak bir yere yerleştirmek oldukça pahalı hale gelebilir. Diyelim ki bir parça kodunuz var ve buna bağlı 4 proje daha var. A projesini kullanan müşterilerinizden biri bir hata bulur ve bir düzeltme yapmanız gerekir. Düzeltmeyi acele ettiniz ve o müşteri mutlu. Ancak diğer 3 projenin de bağlı olduğu bazı kodları değiştirdiniz. Kenar koşullarının getirilmediğinden emin olmak için hepsini yeniden test ettiniz mi?
Ortak kod da çok daha dikkatli bir şekilde hazırlanmalı ve modül arayüzleri çok daha iyi tasarlanmalıdır, çünkü bu kod bir değil 4 istemciyi barındırmalıdır ve bunların her biri bu kodu çok küçük bir farkla kullanabilir.
Projeleriniz farklı sürüm döngülerinde ise, ortak kodu yönetme konusunda daha da dikkatli olmanız gerekir. Ortak kodda değişiklik yapamazsınız çünkü C projesi için nihai görüntüyü kesmekten 3 gün uzaktaysanız, B projesi yeni bir işleve ihtiyaç duyar.
Ortak kütüphanenin doğru çözüm olmadığını söylemiyorum. DRY'nin güçlü bir destekçisiyim ve daha önce ortak kod oluşturup destekledim ve yapmaya devam ediyorum. Sadece kodu ortak hale getirmenin kendi masrafları olacağını söylemek istedim.
Bu kodu yeniden kullanan tek kişi sizseniz, bu o kadar da kötü değil. Bir mühendis ekibiniz varsa ve ortak kodu kullanmaya başlarlarsa, masraflar daha da artar. Başkaları da dahil ise, ortak bir kütüphaneye kod yerleştirmenin "tam" olduğunu düşündüğünüz bir noktaya gelmesi için 3 kat daha fazla zaman almasını bekleyin. A) her türlü kenar koşuluna ve geçersiz kullanıma karşı korumak için kütüphaneyi daha sağlam hale getirmeniz, b) diğerlerinin kütüphaneyi kullanabilmesi için dokümantasyon sağlamak ve c) diğer kişilerin kütüphaneyi kullandığınız şekilde hata ayıklamalarına yardımcı olmak beklemediniz ve belgeleriniz özel kullanım durumlarını kapsamıyordu.
Sunduğum birkaç öneri:
- Otomatik birim testleri kapsamında ortak kodun bulunması uzun bir yol kat edebilir ve bir değişiklik yaptığınızda, sadece başka bir projeyi kırmadığınızı aklınızdan çıkarmayın.
- Ben sadece ortak kod içine çok istikrarlı bir işlevsellik yerleştirir. Geçen yıl zamanlayıcı yönetimi yapmak için bir sınıf yazdıysanız ve 9 ay içinde değiştirmediyseniz ve şimdi zamanlayıcılara ihtiyaç duyan 3 projeniz daha varsa, bunun iyi bir aday olduğundan emin olun. Ama geçen hafta bir şey yazdıysanız, iyi ... o kadar çok seçeneğiniz yok (ve muhtemelen bir sonraki adamdan daha fazla kopyalama / yapıştırma kodundan nefret ediyorum) ama bunu iki kez yaygınlaştırmayı düşünürdüm.
- Bir kod parçası önemsizse, ancak birkaç yerde kullandıysanız, mermiyi ısırmak, DRY'yi yalnız bırakmak ve birden fazla kopyanın yaşamasına izin vermek daha iyi olabilir.
- Bazen ortak kodu ortak bir konuma koymak ve herkesin referans almasını sağlamak işe yarar. Ancak daha ziyade ortak kodu, sürümler, çıkış tarihleri ve her şeyle serbest bırakılabilir olarak kabul edin. Bu şekilde proje C, "Ortak kütüphane v1.3 kullanıyorum" diyebilir ve eğer proje D yeni işlevsellik gerektiriyorsa, v1.3'ü yalnız bırakırsınız, v1.4'ü serbest bırakırsınız ve C projesi etkilenmez. Unutmayın, sadece ortak bir yere kontrol etmek yerine ortak kodu kendi ürünü olarak ele almak çok daha pahalıdır.