Haklısınız - kopyala-yapıştır harika çalışıyor ve DRY'nin görevinizin, kopyalanan şablonun veya kopyanın gelecekte muhafaza edilmesi veya geliştirilmesi gerekmeyeceği bir program üretmesi gerektiğinin bir anlamı yok. Bu iki yazılım bileşeni tamamen farklı bir yaşam döngüsüne sahip olduklarında, ortak kodu, ağır gelişme altında olan ortak bir kütüphaneye yeniden aktararak bir araya getirmek, gerçekten de çaba için öngörülemeyen etkilere neden olabilir. Öte yandan, bir program veya program sisteminin içindeki kod bölümlerini kopyalarken, tüm bu parçalar tipik olarak aynı yaşam döngüsüne sahip olacaktır. Bunun DRY ve proje yönetimi için ne anlama geldiğini aşağıda göstereceğim.
Cidden, orada birçok program var: örneğin, bilgisayar oyunu endüstrisi, birkaç ay veya bir yıl gibi kısa bir süre içerisinde maksimum bir süre boyunca sürdürülmesi gereken birçok program üretiyor ve bu süre sona erdiğinde, kopyala-yapıştır Bakım periyodunun aşıldığı eski bir oyundan eski bir kod, yeni bir oyunun kod tabanına mükemmel şekilde gayet iyi ve işleri hızlandırabilir.
Ne yazık ki, son yıllarda uğraşmam gereken çoğu programın yaşam döngüsü bundan çok farklı. Bana gelen gereksinimlerin veya hata düzeltme isteklerinin% 98'i değişiklik istekleriydimevcut programlar için. Var olan bir yazılımda bir şeyi ne zaman değiştirmeniz gerekiyorsa, "proje yönetimi" ya da planlama, test etme ve hata ayıklama çabalarınız oldukça düşük olduğunda en iyi şekilde çalışır; bu, bir yerde bir şeyi değiştirirseniz, ancak kopyalamaktan kaynaklanamaz. -pasted iş mantığı kolayca kod tabanında bir düzine başka yerlerde de değişiklik yapmanız gerektiğini unutur. Ve tüm bu yerleri bulmayı başarsanız bile, hepsini değiştirme zamanı (ve değişiklikleri test etme) muhtemelen değişecek tek bir yeriniz varmış gibi daha yüksektir. Böylece değişim için doğru bir tahmin bile yapabilirsiniz, maliyetlerin olması gerekenden düzin kat daha fazla olması proje bütçesine kolayca çarpışabilir.
TLDR - Orijinal belgenin veya kopyanın düzeltilmesi ve bakımı için bir zorunluluk veya sorumluluk bulunmayan bir program geliştirdiğinizde, kopyalamaktan çekinmeyin. Ancak siz, ekibiniz veya şirketiniz sorumluysa veya sorumlu olabilirseniz, ne zaman isterseniz DRY'yi uygulayın.
Örnek
Zeyilname olarak, "hata düzeltme ve bakım" ın ne anlama geldiğini ve bunun gerçek dünya örneği ile planlamada, özellikle tek bir ürünün içinde öngörülememenin nasıl olacağını açıklayayım. Gerçekten de bu tür şeylerin gerçekte gerçekleştiğini gördüm, muhtemelen 100 örnekle değil, ancak tek bir kopya örneğiniz olduğunda bile sorunlar başlayabilir.
Görev: bir uygulama için 100 farklı rapor oluşturmak, her rapor çok benzer görünüyor, raporlar arasında bazı gereklilik farkları, bazı farklı mantık, ama sonuçta pek fazla fark yok.
Bu görevi alan dev, birinciyi yaratır (3 gün sürdüğünü söyleyebilir), Kalite Güvencesi ve müşteri incelemesi nedeniyle yapılan bazı değişiklikler veya ufak tefek düzeltmeler bittikten sonra gayet iyi görünüyor. Sonra, her şeyi kopyalayıp yapıştırarak ve değiştirerek bir sonraki raporu oluşturmaya başladı, daha sonra bir sonraki ve her yeni rapor için ortalama olarak ~ 1 güne ihtiyacı var. Çok kestirilebilir, ilk bakışta ...
Şimdi, 100 rapor "hazır" olduktan sonra, program gerçek üretime gidiyor ve KG sırasında gözden kaçırılan bazı sorunlar ortaya çıkıyor. Belki performans sorunları var, belki raporlar düzenli olarak çöküyor, belki de başka şeyler amaçlandığı gibi çalışmıyor. Şimdi, DRY ilkesi uygulandığında, bu sorunların% 90'ı kod tabanını tek bir yerde değiştirerek çözülebilirdi. Ancak kopyala-yapıştır yaklaşımı nedeniyle, sorunun bir kez yerine 100 kez çözülmesi gerekiyor. Ve zaten bir rapordan diğerine uygulanmış olan değişiklikler nedeniyle, dev, ilk raporun düzeltmesini diğer 99'a hızlıca kopyalayamaz. 99 raporun tümüne bakmalı, bunları okumalı, değişikliği değiştirilmişe çevirmelidir. rapor et, test et ve her birini ayrı ayrı hata ayıkla. Başbakan için bu gerçekten zorlaşmaya başlar - elbette "normal" bir hata düzeltmesi için zaman alabilir (3 saat diyelim) ve bunu 100'le çarpabilir, ancak aslında, bu büyük olasılıkla yanlış bir tahmindir, düzeltmelerden bazıları olabilir. yapmak diğerlerinden daha kolay, diğerleri zor olabilir. Ve bu tahmin doğru olsa bile, hata ayıklamanın maliyeti olması gerektiği kadar 100 kat daha yüksek bir maliyete sahip olmak size çok pahalıya mal olacaktır.
Aynı şey, müşterinin, tüm raporlarda benzer şekilde şirket ambleminin rengini değiştirmesini, sayfa boyutunu yapılandırılabilir hale getirmesini veya tüm raporları benzer şekilde etkileyen başka bir yeni gereksinimle istemesi durumunda gerçekleşecektir. Dolayısıyla, bu gerçekleşirse, maliyetler hakkında bir tahmin yapabilir ve müşteriye kodun KURU olduğu zaman ödemek zorunda kalacağı fiyatın 100 katı fatura verebilir. Bununla birlikte, bunu birkaç kez deneyin, ardından müşteri projeyi iptal edecektir, çünkü fahiş gelişim maliyetlerinizi muhtemelen ödeyecektir. Ve belki de bu noktada birileri bunun neden olduğu sorusunu soracak ve bu kopyala-yapıştır programlaması için karar veren kişinin parmağını işaret edecektir.
Demek istediğim: başkaları için bir yazılım ürettiğinizde, her zaman en azından kısa bir süre için bir şeyin çalışmasını sağlamak, hataları düzeltmek, programı değişen gereksinimlere uyarlamak vb. Sorumluluğuna sahipsiniz. Yeşil alan projesinde bile, bunlar parçalar, başlangıçta planlanan geliştirme çabalarından çok daha fazlasını hızla toplayabilir. Özellikle de tüm kopyalanmış kodlarınız tek bir ürünün içinde olduğunda, sorumluluk süresi, tüm parçalar için aynıdır; bu, eski kodları artık olmayan ölü bir projeden kopyaladığınız durumdan oldukça farklıdır. aktif bakım altında.