Bunun tartışmalı bir meta-cevap olabileceğini düşünüyorum ve partiye biraz geç kaldım, ancak buradan bahsetmek çok önemli çünkü bence nereden geldiğini biliyorum.
Tasarım modellerinin kullanımındaki sorun, öğretildiklerinde şöyle bir durum sunmalarıdır:
Bu özel senaryoya sahipsiniz. Kodunuzu bu şekilde düzenleyin. İşte akıllı görünümlü, ancak biraz da olsa örnek.
Sorun şu ki, gerçek mühendislik yapmaya başladığınızda, işler bu kadar kuru ve kuru değildir. Okuduğunuz tasarım deseni, çözmeye çalıştığınız soruna tam olarak uymayacaktır. Kullandığınız kütüphanelerin, bu kalıpları açıklayan metinde belirtilen her şeyi kendi özel yöntemleriyle tamamen ihlal ettiği anlamına gelmez. Sonuç olarak, yazdığınız kod "yanlış hissettiriyor" ve buna benzer sorular soruyorsunuz.
Buna ek olarak, yazılım mühendisliği hakkında konuşurken şunları söyleyen Andrei Alexandrescu'dan alıntı yapmak isterim:
Yazılım mühendisliği, belki de diğer mühendislik disiplinlerinden daha fazla, zengin bir çeşitlilik sergiliyor: Aynı şeyi birçok doğru şekilde yapabilirsiniz ve doğru ile yanlış arasında sonsuz farklılıklar vardır.
Belki bu biraz abartıdır, ancak bence kodunuzda neden daha az kendine güvenebileceğinize dair ek bir neden açıklıyor.
Böyle zamanlarda, Insomniac'taki oyun motoru lideri Mike Acton'un peygamberlik sesi kafamda çığlık atar:
VERİLERİNİZİ BİLİN
Programınızın girdileri ve istenen çıktılar hakkında konuşuyor. Ve sonra Efsanevi Adam Ayından bu Fred Brooks'un cevheri var:
Bana akış şemalarını göster ve masalarını gizle, ben de gizemli olmaya devam edeceğim. Bana masalarını göster ve genellikle akış çizelgelerine ihtiyacım olmayacak; açık olacaklar.
Öyleyse, yerinde olsam, tipik giriş davama dayanarak sorunumu ve istenen doğru çıktıyı elde edip etmediğini düşünürdüm. Ve bunun gibi sorular sorun:
- Programımın çıktı verileri doğru mu?
- En yaygın giriş davam için verimli / hızlı üretiliyor mu?
- Kodum, hem ben hem de takım arkadaşlarım için yerel olarak gerekçelendirecek kadar kolay mı? Değilse, daha basit hale getirebilir miyim?
Bunu yaptığınızda, "kaç tane soyutlama veya tasarım desenine ihtiyaç duyulduğu" sorusu cevaplamak çok daha kolay hale gelir. Kaç tane soyutlama katmanına ihtiyacınız var? Bu hedeflere ulaşmak için gereken kadar, daha fazla değil. “Peki ya tasarım kalıpları? Hiç kullanmadım!” Peki, yukarıdaki hedeflere bir model doğrudan uygulanmadan gerçekleştirilirse, sorun değil. Çalışmasını sağlayın ve bir sonraki soruna geçin. Verilerinizden başlayın, koddan değil.