Bir arkadaşım, her geliştiriciden nefret edeceği bir projede küçük bir şirket için çalışıyor: mümkün olduğu kadar çabuk serbest bırakılması için baskı yapıyor, teknik borcu önemseyen görünüyor, müşterinin teknik geçmişi yok.
Bana bunun gibi projelerde tasarım kalıplarının uygunluğunu düşündürten bir hikaye anlattı. İşte hikaye.
Ürünleri web sitesinde farklı yerlerde göstermek zorunda kaldık. Örneğin, içerik yöneticileri ürünleri, aynı zamanda son kullanıcıları veya ortakları API üzerinden görüntüleyebilir.
Bazen, ürünlerden bilgiler eksikti: örneğin, bir ürünün henüz yaratıldığı sırada hiçbir grubun fiyatı yoktu, ancak fiyat henüz belirlenmedi. Bazılarının tanımı yoktu (açıklama, değişiklik geçmişi, yerelleştirilmiş içerik vb. İçeren karmaşık bir nesnedir). Bazılarında gönderi bilgisi yoktu.
Tasarım kalıpları hakkındaki son okumalarımdan esinlenerek, bunun sihirli Null Nesne desenini kullanmak için mükemmel bir fırsat olduğunu düşündüm . Ben de yaptım ve her şey düzgün ve temizdi. Birinin
product.Price.ToString("c")
fiyatı görüntülemek veyaproduct.Description.Current
açıklamayı göstermek için araması gerekiyordu ; şartlı şeyler gerekli değildir. Bir güne kadar, bir paydaş, JSON'dayken API'de farklı şekilde gösterilmesini istedinull
. Ayrıca içerik yöneticileri için "Fiyat belirtilmemiş [Değiştir]" i göstererek de farklıdır. Ve sevgili Null Nesne kalıbımı öldürmek zorunda kaldım, çünkü artık buna gerek yoktu.Aynı şekilde, birkaç soyut fabrika ve birkaç inşaatçıyı çıkarmak zorunda kaldım, güzel Cephe desenimi doğrudan ve çirkin çağrılarla değiştirdim, çünkü temel arayüzler üç ay boyunca günde iki kez değişti ve hatta Singleton beni terk etti. Gereksinimler ilgili nesnenin içeriğe bağlı olarak farklı olması gerektiğini söylediğinde.
Üç haftadan fazla süren çalışma, tasarım kalıpları eklemek, ardından bir ay sonra parçalamaktan ibaretti ve kodum nihayet, kendim de dahil olmak üzere herkes tarafından bakımı imkansız olacak şekilde spagetti oldu. Bu kalıpları asla ilk başta kullanmamak daha iyi olmaz mıydı?
Aslında, gereksinimlerin sürekli değiştiği bu tür projeler üzerinde kendim çalışmak zorunda kaldım ve aklımda olmayan veya ürünün tutarlılığını gerçekten düşünmeyen insanlar tarafından dikte edildi. Bu bağlamda, ne kadar çevik olduğunuz önemli değildir, bir soruna zarif bir çözüm getireceksiniz ve sonunda uyguladığınızda, gereksinimlerin çok sert bir şekilde değiştiğini, zarif çözümünüzün uymayacağını öğreneceksiniz. artık.
Bu durumda çözüm ne olurdu?
Tasarım desenleri kullanmamak, düşünmekten vazgeçmek ve doğrudan kod yazmak mı?
Bir takımın doğrudan kod yazdığı, bir diğeri yazmadan önce iki kez düşündüğü, orijinal tasarımını birkaç gün sonra atmak zorunda olma riskini aldığı bir deneyim yapmak ilginç olurdu: kim bilir, belki de her iki takımın da aynı teknik borç. Bu verilerin bulunmadığı durumlarda, 20 aylık bir proje üzerinde çalışırken önceden düşünmeden kod yazmanın doğru olmadığını iddia ediyorum .
Artık anlamlı olmayan tasarım desenini koru ve yeni oluşturulan durum için daha fazla desen eklemeye çalış.
Bu da doğru görünmüyor. Desenler, kodun anlaşılmasını basitleştirmek için kullanılır; çok fazla desen koymak ve kod karışıklık haline gelecektir.
Yeni gereksinimleri kapsayan yeni bir tasarım düşünmeye başlayın, sonra eski tasarımı yavaşça yenisine yeniden yansıtın.
Bir teorisyen ve Çevik’i tercih eden biri olarak, kesinlikle bu konuyla ilgileniyorum. Uygulamada, her hafta beyaz tahtaya geri dönmeniz ve önceki tasarımın büyük bölümünü yinelemeniz gerektiğini bildiğiniz ve müşterinin bunun için size ödeme yapacak kadar parası olmadığı ya da beklemek için yeterli zamanınız olmadığını bildiğiniz zaman , bu muhtemelen işe yaramaz.
Peki, herhangi bir öneriniz var mı?