En sık kullanılan tasarım deseni nedir? [kapalı]


24

Sizce en popüler tasarım deseni hangisidir?


Her ikisi de, mümkünse ...
Tamara Wijsman

"Polimorfizm yerine geçiş"?
mlvljr

@Bigown: Sonra en çok sevdiğin cevabı "kabul etmelisin". Cevapların hiçbirini beğenmezseniz, lütfen bir ödül verin.
Macneil

2
yapıcı değil olarak kapanmaya oy verdi - bu temelde bir anket. Birinin alıntı yapmak için ampirik bir çalışması olmadıkça, cevapların hepsi tahminler veya favoriler (veya favoriler olmayanlar) olacak ve oylar kişisel duyguları yansıtacaktır. Sonuçta derinliği olmayan bir tasarım desenleri listesi olacaktır. Dolayısıyla, yapıcı değil.
Steven A. Lowe

@Steven: Jay'in The Big Ball of Mud konusunda haklı olduğuna eminim. :-)
Tamara Wijsman

Yanıtlar:


39

En yaygın olanın 'Çamurun Büyük Topu' olduğundan eminim. Maalesef hepimiz için.
http://en.wikipedia.org/wiki/Big_ball_of_mud


Katılıyorum, yeni bir projeye başladığınızda her şey iyi yapılandırılmış ve belgelenmiştir, ancak son tarih yaklaştığında, hepsi büyük bir çamur topu gibi sona ermektedir
Arturo Molina

3
@ Arturo - Bu olası bir sebep. Diğerleri: 1) Beklenmedik şekilde başarılı olan deneyimsiz programcılar tarafından başlatılan ve ardından asıl amacının ötesine geçen küçük bir proje. 2) Deneyimsiz programcıların bakıma atanma eğilimi, o zamanlar orijinal mimarlık hakkında rehberlik veya anlayışa sahip değiller, bu yüzden sadece işleri hackliyorlar ve sistem yaşlandıkça kötüye gidiyor. 3) Takım, yanlış teknolojiyi ya da aşina olmadıkları yeni bir teknolojiyi kullanıyor ve yeni bir projede yetersiz kullanıyor ve son teslim tarihinden önce kraterler :)
Jay

1
LOL - Sana daha fazla puan ekleyebilseydim, yapardım. Mükemmel (ve üzgün) gözlem.
luis.espinal

25

MVC ve varyasyonları kesinlikle en iyi tasarım modellerinden biridir.


2
OP'nin sorusunun oldukça saçma olduğunu söyleyecektim (hala öyle olduğuna inanıyorum). Ancak, cevabınız hemen hemen doğru IMO. Tutarlı bir şekilde kullanılan bir desen (ve varyasyonları) varsa, bu odur. Cevabınız için +1.
luis.espinal

21

Dörtlü Çete tasarım modellerinden bahsediyorsan , Singleton demek zorunda kalacağım . Bu gerçekten üzücü bir durum - neredeyse programcılar tasarım desenlerinin sihrini duyuyorlar ve ardından ilkinden sonra durdular.

Mimari tarzı kalıplardan (diğer bir deyişle, birden fazla sınıfa veya katmanı kapsayan tasarım kalıplarından) bahsediyorsanız , MVC'yi söylemem gerekirdi . Diğer birkaçı da popüler olanı depo modeli ve servis bulucu .


2
Pek çok insan Singleton'ı antipattern olarak kabul edersen, daha da üzücü!
RichardOD

1
@RichardOD, insanların bunu yapmadıklarında bir tanesini düşünmesi üzücü mü yoksa insanların bir anti-patern olduğunda kullanması üzücü mü?
Matt Olenik

Demek istediğim, bu kadar popüler olması üzücü - bir röportaj favorisi gibi görünüyor. En son görüşmemde bana bir Singleton'u nasıl kodlayacağıma dair sorular soruldu ve cevabım benim için bunun için Unity gibi bir IoC kabı kullanmamamdı.
RichardOD

@RichardOD - bir anti-patern olarak kabul edilir, tekil değildir. Bu bir anti-patern olan kötüye kullanımıdır. Aslında çok az sayıda vaka singleton talep ediyor / ihtiyaç duyuyor ve kaynak ayrıntı derecesini kontrol eden kapların bulunduğu ortamlarda bile ihtiyaç duyulmuyor. Örneğin, modern bir Java kod tabanında bir singleton gördüğünüzde, bu bir anti-pattern kullanımı için tipik bir kırmızı bayraktır (singleton deseninde değil.)
luis.espinal

@ Jaco - Senden farklı bir şey alırdım. Sanırım kompozit, strateji ve şablon (ve onların çoklu reenkarnasyonları), özellikle son on yıl boyunca kalıtım üzerine yapısal kompozisyona odaklandığımızdan beri, tekilden çok daha yaygın hale geldi.
luis.espinal


7

Dekoratör

Kompozisyon aracılığıyla çalışma zamanında bir nesneye işlevsellik ekleyin. Benim kişisel favorim.

Düzenleme: Ayrıca Fabrika muhtemelen en yaygın olanlarından biridir.


5

Cephe

Twitter veya SO API'ları gibi herhangi bir REST arayüzü düşünün. En azından twitter davasında korkunç derecede karmaşık olabilen bir grup arka tarafı saklıyor.

Hangi apk db @ apklusk tweets içinde saklanır mı? Ve hızlı bir önbelleği var? Ve @ shemnon'un okuryazarlığı o kadar düşük ki, tweetler her zaman hafızada kalıyor? Cephe'nin büyüsü bu.


5

Strateji Deseni

Bağımlılık enjeksiyonunu daha önce kullandıysanız, strateji modelini kullandınız.


Kabul edildi, şablona ve kompozite ek olarak strateji (ve çoklu varyasyonları ve kombinasyonları.)
luis.espinal

5

Neden kimse yineleyiciden bahsetmedi ? Özellikle de karmaşık veri yapılarını oluşturan tüm haritalarda en çok kullandığım harita. Yoksa yeniden uyguladığımız kalıplardan mı bahsediyoruz?


3

Kimsenin Fabrika modelinden bahsetmediğine şaşırdım, benim deneyimlerime göre buradaki modellerden en çok kullanılan (ve aynı zamanda en çok kötüye kullanılan) biriydi. İlk değilse, muhtemelen singleton ilk olmalı, bunun yakın bir saniye olacağını düşünürdüm.


3

Önceki cevabımın yanı sıra, kalıtsal bir projenin canavarımdan bugün karşılaştığım yeni bir tane daha ekleyeceğim:

Kopyala yapıştır

Hata ayıklama yaparken benzer adlandırılmış işlevleri çağıran bir kod parçasına rastladım:

if(x)
   Func1
else
   Func2

Func1 ve Func2 aynı parametrelere sahipti. Onları dışarı çektim ve farklı oldum, Func1 Func3 ve Func2 Func4 çağrıları dışında% 100 aynılar. Bunları çıkardım ve farklılaştırdım. % 100 aynı, 1 satır hariç. Böylece önceki bir programcı, bayrak parametresi eklemek yerine, 50 satırlık iki işlevi kopyalamak ve tam olarak 1 yerde kullanılan 2 özel işleve yapıştırmaya karar verdi. Ağlamak istememi sağlıyor.


2

Dörtlü Çete tasarım modellerinden bahsederken, Gözlemci modelini kullanmayan bir program düşünemiyorum. Ayrıca, Jaco'nın bahsettiği gibi, Singleton da çok kullanılıyor, maalesef bir çekiç haline geldi (herhangi bir programcı tam olarak gerekmese bile kullanıyor).


1
Komik, ama hiçbir zaman bir Singleton kullanma ihtiyacım olmadı. Global durumu tutacak bir yere ihtiyacım olursa, bir konfigürasyon dosyasına koyar ve erişmek için normal bir sınıf kullanırım.
Robert Harvey,

Tabii ki, bu durumlarda gerekli değil ... peki bazı işleri, eşzamanlı ve güvenli iş yapmak için gerçekten bir nesneye ihtiyaç duyduğunuzda. Singleton sadece bazı statik değişkenlerin durumunu tutmak için değil, yapılacak gerçek işi yapan gerçek bir nesnedir.
Cristian

Bunun için ihtiyaç duyduğum tek zaman veritabanı bağlantıları. Bununla birlikte, iş yerinde bu projedeki hemen hemen her "Servis" (okuma: fabrikaya benzer) sınıfı, PHP $_SESSIONdeğişkeninde depolanan bir tekildir .
Tarka

2

yorumlayıcı

Nadiren uygulanır, sıklıkla kullanılır. XPATH, XSLT, Regex, jQuery seçicileri vb.


1

Henüz kimsenin "Oluşturucu" demediğine şaşırdım. Veya "Adaptör". Muhtemelen bahsettiğimiz diğerlerinin bazıları kadar egzotik değiller ama ben her zaman kullanırım. Fabrika ve Soyut Fabrika da çok yaygındır (ancak zaten alınmışlar).




0

Yazılım tasarım düzeyinde, Kompozit, Strateji ve Şablonun (ve daha küçük bir ölçüde Fabrika) en yaygın kullanım olduğunu iddia ediyorum. Son on yıl boyunca, sistemlerimizi bir OO tasarımı kullanarak inşa ederken mirasa ilişkin bir kompozisyon tercihi gördük. Sonuç olarak, az önce bahsedilen kalıpların birleşimi diğer tüm IMO'lardan çok daha önemli bir rol oynamaktadır.

Mimari olarak, girişimde MVC'yi ve şeylerin gömülü tarafındaki devlet makinelerine dayanan kalıpları savunuyorum.

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.