it-swarm-tr.com

Günümüzde tasarım modelleri gerçekten gerekli mi?

"İşyerinde Kodlayıcılar" okuyordum ve kitapta görüşülen profesyonellerin bazılarının tasarım kalıpları konusunda çok hevesli olmadıkları gerçeğiyle karşı karşıya kaldım.

Bunun 2 ana nedeni olduğunu düşünüyorum:

  1. Tasarım kalıpları bizi kendi terimleriyle düşünmeye zorlar. Başka bir deyişle, yeni bir şey icat etmek neredeyse imkansızdır (belki daha iyi).

  2. Tasarım kalıpları sonsuza dek sürmez. Diller ve teknolojiler hızla değişir; bu nedenle, tasarım kalıpları nihayetinde önemsiz hale gelecektir.

Bu nedenle, herhangi bir özel desen olmadan düzgün bir şekilde nasıl programlanacağını öğrenmek ve bunları öğrenmek değil belki daha önemlidir.

Mesele şu ki, genellikle insanlar bir sorunla karşılaştıklarında ve fazla zamanları olmadığında, bir desen kullanmaya çalışıyorlardı. Bu, varolan kodu çalıştırabilmek için küçük değişikliklerle projenize kopyalayıp yapıştırmak anlamına gelir. Bir şeyi değiştirme veya ekleme zamanı geldiğinde, bir geliştirici nereden başlayacağını bilmiyor, çünkü bu onun kodu değil ve ona çok aşina değil.

112
Sergey

Param için, herkesin tasarım desenlerinin noktasını kaçırdığını düşünüyorum. Belirli bir durumda hangi modeli kullanmam gerektiğini merak ederek oturmak nadirdir. Ayrıca, bu kalıpların çoğunu isimleri olduğunu bilmeden çok önce kullanıyordum.

Tasarım kalıplarının gücü iletişimdedir. Benim önerdiğimi ayrıntılı olarak anlatmaktan ziyade "bunun için bir Strateji kullan" demek çok daha hızlı. Bu iki terimin ne anlama geldiğini bilirsek, yağ alan modellerinin işlem komut dosyalarına karşı faydalarını tartışmamız çok daha kolaydır. Ve bunun gibi.

Ve en önemlisi, eğer bir sınıf FooBuilder isimlendirdiysem, Foo'umu oluşturmak için Builder desenini kullandığımı biliyorsun.

"Gözlemci modeli bunun için idealdir" dediğimde neden bahsettiğimi bilmeseniz bile, kolayca gidip Google'a geçebilirsiniz.

Bu anlamda tasarım kalıplarının gücü asla kaybolmayacak.

264
pdr

Desenler iki temel amaca hizmet eder:

  • Gerilimleri tahmin edilebilir şekilde çözme: Desenler, belirli bir gerginlik kümesini çalıştığı bilinen bir şekilde çözmek için tasarlanmıştır. Smalltalk En İyi Uygulama Kalıplarının yazarı Kent Beck, kalıpları bir uzmanın benzer koşullarda alacağı kararı tekrarlamanın bir yolu olarak tanımlar. Gerilimler aynı kaldığı sürece (ve çoğu zaman yaparlar), bunları çözen desenler faydalı olacaktır.

  • İletişim gücü çarpanı: Desenler biraz fazla şey söylememize izin verir. Çok çeşitli sorun alanlarında uygulanabilen küçük, güçlü, iyi anlaşılmış kavramlardan yararlanırlar. @ pdr'nin cevabı, örüntülerin iletişimsel değeri konusunda öldü.

15
Rein Henrichs

Bence tasarım kalıplarının inovasyonu engellediği olumlu. Nerede olursanız olun bilmeniz gerekir, böylece tekerleği yeniden icat etmenize gerek kalmaz. Geçici olarak, kalıplar bir bütün olarak OOP sistemler için geçerlidir ve herhangi bir platform veya dile bağlı değildir.

Şimdi, insanlar kalıplar hakkında konuşurken sevmediğim şey, bazı insanların bunlarla bir tür takıntısı olması. Bir keresinde bana kodumda buzzwords eksikliği nedeniyle yeterince girişimci görünmüyordu çünkü "en az iki desen daha dahil" (WTF ?!) sormak için bir müşteri vardı.

12
Vitor Py

Belki anti-desenler kavramı almancadır. Tasarım kalıplarını bir yazılım mühendisi olmanın kritik adımı olarak düşünmüyorum. Yazılım tasarımı önemlidir, genellikle bir projede yazılım mimarının ayrıcalığı olarak ayrılır, ancak gerçekçi olarak meşhur "iyi jelleşmiş" takımda fikir birliği ile dövülebilecek bir şey.

Ancak tasarım kalıpları ve anti kalıplar bu tartışmalar için bir kaynak oluşturur. İyi çalışan (ya da olmayan) şeylerin derslerini ve tasarım seçimlerinin sonuçlarından nasıl faydalanacağını (ya da azaltacağını) takdir etmek gerekir. İyi bir takım olabilir bu tür tartışmalar için kendi kelime dağarcığını ortaya çıkarır, ancak orada bulunan yazarlar tarafından yapılan defacto standartlarına başvurmak gerçekten kötü bir şey değildir.

6
hardmath

İki çeşit tasarım deseni vardır:

  1. Evrensel modeller, karmaşık programları nasıl düzenleyeceğiniz konusunda çok daha fazlası, böylece onları anlayabilirsiniz. Bunlar ortadan kalkmıyor, ancak daha fazla örnek keşfedilebilir.
  2. Durumsal kalıplar, bu güçler değiştiğinde ilgisiz hale gelecek şekilde kısıtlamaların (örneğin programlama dili) neden olduğu belirli kuvvetlere o kadar bağlı.

Tamam, tartışmasız tüm kalıplar biraz durumsaldır, ancak bazı güçlerle gerçek dünyadan, diğerleriyle güçler araçlardan gelir. Araçlar gerçek dünyadan çok daha hızlı değişir.

4
Donal Fellows

Tasarım kalıplarını okumak, onları yeniden keşfetmek yerine matematiği öğrenmek gibidir. Daha önce neler olduğuna dair sağlam bir anlayışa sahip olduğunuzda hiçbiri sizi belirli bir alanda büyük bir ilerleme kaydetmekten alıkoyamaz. Sizce Rieman Öklid'i hiç okumuyor mu?

3
Gus

Meslektaşlarınızın veya müşterilerinizin "Bu nasıl çalışır?" Diye düşünmek için harcadıkları zamanı azalttıklarında tasarım kalıpları kullanmanın faydası vardır. Standartlaştırma uğruna bir standardı uygulamaya koymanın bir anlamı olmasa da, bir şey yapmanın ortak ve iyi anlaşılmış bir yolu varsa, bir kodlayıcı onu bulmayı ve yapmayı bekleyen bu deseni aradığında, onların ve işlerinizi yaptınız. Daha kolay.

1
Tom W

Dört kişiden oluşan çetenin tasarım kalıplarını

sık karşılaşılan bir soruna ortak bir çözüm *

Evet, aynı türden bir sorun ortaya çıktığında modeller önemlidir. Bu da bizi “Tasarım Deseni” terimiyle ilgili bir soruna getiriyor. Bir desen, tekrar tekrar ortaya çıkan tanınabilir bir şeydir. Yani gerçekte bir tasarım örüntüsü yoktur, bir problem örüntüsü vardır.

Bazı programlama dillerinde bu sorunların bazılarına yerel çözümler bulunabilir. "Tasarım Desenleri" kitabının kendisi, CLOS kullanıyorsanız ziyaretçi deseninin çok az değerinden bahsetmektedir, çünkü çoklu gönderim yerel olarak CLOS tarafından desteklenmektedir, bu da Ziyaretçi deseninin çözmeye çalıştığı problemdir.

Ayrıca, .NET çerçevesi olayları birden çok dinleyiciye yayımlamak için bir yerleşik olay mekanizmasına sahiptir ve bu da Gözlemci modelini bu bağlamda daha az alakalı hale getirir.

Masaüstü uygulamalarından web uygulamalarına ** geçiş, çözmemiz gereken programlama sorunlarının türünü de değiştirir. "Tasarım Desenleri" kitabındaki desenlerin çoğu masaüstü uygulamaları için geçerlidir, ancak web uygulamaları için fazla değildir. Tabii ki, tek sayfalık uygulamalarda, bu kalıplar istemci tarafında tekrar alakalı olabilir.

Ancak acemi bir programcı olduğunuzda ve ilk kez yeni bir sorunla karşı karşıya kaldığınızda, tasarım desenleri ve "Tasarım Desenleri" veya "Kurumsal Uygulama Mimarisi Desenleri" gibi kitaplar çok değerlidir; ilk kez Geri Alma işlevini uygulamam istendi. "Tasarım Desenleri" kitabı olmasaydı, uygulamam muhtemelen her durum değiştiren işlemden sonra verilerin anlık görüntüsünü saklamak gibi bir şey olurdu - çok hataya eğilimli ve korkunç derecede verimsiz bir yaklaşım.

Yani evet, modelin bir kısmı zamanla daha az alakalı hale gelir ve deneyimli bir programcı olduktan sonra onlar hakkında daha az düşünürsünüz. Ancak bir acemi için, bir problemi çözmenin yolu olduğunu hatırladığınız sürece değerlidir - ve mümkün olduğunca çok kullanma arayışı değildir.

* Alıntı bellekten alındığı için% 100 doğru olmayabilir

** tecrübelerime göre, işletmeler için dahili iş kolu uygulamaları için web dağıtım mekanizmaları seçmek çok yaygınlaşıyor.

*** Fonksiyonel programlama ve fonksiyonel veri yapılarını öğrendikten sonra, aslında bugün bunu çözebileceğim bir yol olabilir.

1
Pete