Benzer özellikler için farklı desenler kullanma


10

Herhangi bir yazılım projesinde olduğu gibi gelecekte başka biri tarafından alınabilecek bir projedeki tek geliştiriciyim.

Diyelim ki X özelliğini A özelliğini uygulamak için kullandım. Özelliği geliştirip bitirdikten sonra, yeni öğrendiğim Y desenini kullanarak aynı özelliği uygulayabileceğimin farkındayım. Ancak A özelliği iyi çalışıyor ve X'ten Y'ye yeniden düzenleme zaman alıcı ve çok az fayda sağlıyor.

O zaman B özelliğini uygulama zamanı. A'ya benzer, ancak bu sefer Y deseniyle oynamak için bu fırsatı kullanmak istiyorum. A sonucundan daha iyi sonuç elde etmekten mutluyum, ama şimdi kodum iki kullanıyor benzer özellikler için farklı desenler, X ve Y.

Ancak, özellik oluştururken AI'nın özellik B ile aynı modeli kullanacak kadar yetenekli olmaması dışında, farklı desen kullanmak için gerçek bir neden yoktur.

Bu sorunun belirli bir sorun için doğru modeli seçmekle ilgili olmadığını unutmayın ; benzer sorunları çözmek için kod tabanında birlikte bulunan yaklaşık iki örüntü vardır, bu da refactor için yeterli zaman verilene indirgenebilir.

  • Bu kod kokusu mu?
  • Kaynak kodunu böyle tutmanın dezavantajları nelerdir?
  • Sadece bir model kullanmaya bağlı kalmalı mıyım? yani refactor A, Y yazarken veya B yazarken X kullanmaya devam eder mi?
  • Kaynakta, benzer özellikler için iki farklı örüntü olmasının nedeninin aslında hiçbir neden olmadığını nasıl anlatabilirim?
  • Bir sonraki geliştiricinin kodum hakkında ne düşündüğü konusunda endişeleniyor muyum?

Yanıtlar:


7

X ve Y modeli aynı sorunu çözüyorsa ve ikisi de objektif olarak daha iyi değilse, o zaman birine karar vermeli ve ona bağlı kalmalısınız. Mümkünse aynı sorunu aynı şekilde tutarlı bir şekilde çözmeye çalışmalısınız.

Sen edilir değil çok fazla, daha çok kesinlikle işleyebilir ve temizlemek gerekir ciddi bir kod koku endişesi.

Bir kod tabanında aynı soruna farklı çözümlere sahip olmanın dezavantajları:

  • kodu anlamak iki kat daha uzun sürecek
  • kalıbı içeren davranışlardan bazılarını değiştirdiğinizde kodun değiştirilmesi iki kat daha uzun sürecektir
  • iki kat daha fazla hatanız olacak
  • şimdiki ve gelecekteki meslektaşlarınız senden nefret edecek

2

Ben JacquesB en katılıyorum cevabı . Diğer sorularınızı ele alarak, şu anda bir arada var olan iki desene sahipseniz ve başvurunuzu en iyi bulduğunuzu kullanmak için yeniden düzenleme zamanı (henüz) yoksa, "suçlu" sınıftaki yorumlarınızda (yeniden düzenlenecek olan). Bu şekilde, gelecekteki geliştirici (siz veya bir başkası) için hala ödenecek bazı borçlar olduğu açıktır.

Son olarak, böyle bir kod tabanını korumanın ana dezavantajı, eklenen, ancak gereksiz karmaşıklıktır. Kesinlikle pahasına gereksiz karmaşıklığı önlemek istiyorum!


Bunu bir tür yapılacaklar listesinde veya en azından koddaki bir nota ek olarak görmeyi tercih ederim.
JeffO

@JeffO katılıyorum. Yalnızca yapılacaklar listelerine güvenmek ek sorunlara yol açmamakla birlikte, çoğu zaman bunlar paylaşılan kod tabanındaki açıklamanın tersine kişisel (paylaşılmayan) olduklarından. Ama yine de katılıyorum ve her ikisine de sahip olmak iyi bir fikir olabilir (kesinlikle başlamaktan kaçınılmazsa).
Ocak'ta carlossierra

İyi bir noktaya değindin. Paylaşımı, işbirliğini, iletişimi ve diğer eğlenceli şeyleri içeren basit bir Yapılacaklar listesinden daha fazlası olmalıdır;
JeffO

1

Kod tabanında oynamayın. Yazma prototipleri, bir desen / tasarımın diğer (ler) e göre avantajlarını ve dezavantajlarını bulabilmenizi sağlar.

Sezgisel olarak hissedilen şeylerin azaltılabileceği ortaya çıkabilir, aslında 2 farklı desene sahip olmaktan daha karmaşık olabilir.

Prototip için geliştirilen kodun çoğunu atmayı umuyoruz.


1

Bunun bir kod kokusu olup olmadığı gerçekten benzer A problemi ve B probleminin ne olduğuna bağlıdır. JacquesB'nin cevabı, çok benzer olduklarını varsayar ve A problemini değiştirirseniz (örneğin bir hatayı düzeltmek için) aynı zamanda B problemini de değiştirmeniz gerekecektir. JaqueB haklı olabilir, ancak A ve B'nin bağımsız olarak değişmesi de mümkündür, çünkü hepsi bu kadar benzer değildir. Bu durumda, olumsuzlukların açıklanması olası değildir.

Açıklamanıza dayanarak, bir kod kokusu (Çoğaltma) gibi geliyor, ancak kokunun ne kadar kokmuş olduğunu söylemek zor. Örneğin A, Şablon Yöntemi'ni ve B, Strateji'yi kullanıyorsa, kullanılan yansıtma modellerine rağmen iki sorun çok farklı olabilir. Bekler ve yaklaşımı görürdüm. Sorun C'nin ortaya çıkması ve tıpkı A ve B gibi olması durumunda, A'yı B ile tutarlı olmak için yeniden düzenlerim ve C'yi oluşturmak çok basit olmalıdır. A'da bir hata varsa, B ile eşleşmesi için yeniden düzenleme yapmak isterim, ardından hatayı düzeltin. Hiçbir şey değişmezse .... önemli değil mi?

Bir kod tabanında benzer sorunları çözmenin birden fazla yolu olması hayatın bir gerçeğidir. Tek geliştirici olsanız bile, yeni şeyler öğrenecek ve yeni öngörüler elde edeceksiniz, böylece çözümleriniz değişecek. Doğru tanıdığınız gibi, değer verirken bu kusurları düzeltmeniz gerekir. Bir daha asla değişmeyecek olan kodu yeniden tasarlamak (bir deseni değiştirdiğinizde gerçekten yaptığınız şey) değer sağlamaz. Değişeceğini bilmenin tek gerçek yolu aslında değişikliği yapmak zorunda, bu yüzden C sorununu beklerdim.


1

Hayır, tek bir kod tabanında birden fazla desene sahip olabilirsiniz.

Bununla birlikte, bir bileşeni uyguluyorsanız ve bunu bir kalıbı izleyen bir yolunu açıklıyorsanız, muhtemelen bir bileşene bağlı kalmak en iyisidir. Diyelim ki, REST sorgu istemcim için oluşturucu kalıbını kullanıyorum, ancak kaynaklardan birini farklı şekilde uyguluyorum. Bu insanları şaşırtacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.