Tasarım desenlerinde kanonik bir kitap var mı? [kapalı]


49

Tasarım kalıplarını öğrenmekle ilgileniyorum ve bu konunun öğrenilmesinde üst düzey kitapların neyin kabul edildiğini bilmek istiyorum.

En iyi uygulamaları, tasarım metodolojilerini ve tasarım modelleriyle ilgili diğer yararlı bilgileri tanımlamak için fiili standart olan bir kitap var mı? Peki ya bu kitap onu özel kılıyor?


Düşündüğün şeyin bu olup olmadığından emin değilim, ama Forrst'ta çok fazla zekice geliştirme ürünü buldum .
Trey Piepmeier

2
"Tasarım desenleri için referans kaynakları" veya "Tasarım deseni kaynakları" ("sadece talep üzerine bakmak" olarak "referans" anlamına gelmediği için) ve tüm liste öğelerini gövdeye taşıma (veya kaldırma )?


Bazı makul uygulamalar için, dofactory'dekilere bir göz atardım (kitapları olsa da satın almadım ).
Steven Evers

4
Bu soruya eksiksiz ve kapsamlı bir cevap verildiğinde, diğer tasarım kalıplarını soruları, bunun kanonik soru-cevap olarak tanımlaması ve bu konuya cevap çifti olarak göstermesi için kapattım.

Yanıtlar:


58

Tasarım Desenleri: Yeniden Kullanılabilir Nesneye Yönelik Yazılımın Elemanları , tasarım örnekleri üzerine kanonik bir kitap tanımlamama çok yaklaşıyor. Göre kendi wikipedia makalesinde (vurgu benim):

Kitabın aslı yayın tarihi, 1995 yılı telif hakkıyla 21 Ekim 1994'tür ve Temmuz 2010 itibariyle, 38. baskısında yer almaktadır . Kitap ilk olarak Ekim 1994’te Oregon’da Oregon’da düzenlenen OOPSLA toplantısında kamuoyuna açıklandı. Yazılım mühendisliği alanında oldukça etkili oldu ve nesne odaklı tasarım teorisi ve pratiği için önemli bir kaynak olarak görüldü. Fazla 500.000 kopya satıldı İngilizce ve 13 diğer dillerde .

Ward Cunningham , bir tasarım desenleri öncü bir tutar kitabın desenlerin online katalog üzerinde WikiWikiWeb . Ve Wikipedia’nın tasarım deseni hakkındaki makalesine göre (yine benimkine vurgu yap):

Design Patterns: Yeniden Kullanılabilir Nesne Yönelimli Yazılımın Elemanları adlı kitabın 1994 yılında "Gang of Four" (Gamma ve diğerleri) adlı kitabı yayınlandı .

Aynı makalede başvurulan türe göre kayda değer birkaç kitap daha var :

Fowler'in kitabını okuduklarımdan, bu son derece etkili ve iyi bir okuma. Bazı noktalarda zevkime göre biraz belirsiz, ama genel olarak eğlenceli bir kitap. Bir var çevrimiçi katalog asgari açıklamaları kitapta yer kalıplarının.

Ayrıca Head First Design Patterns'ı inceledim ve Head First serisinin başka bir kitabını okuduysanız, bu serideki çoğu kitapla aynı yüksek kalitede ve eğlenceli :

Baş İlk, O'Reilly Media tarafından yayınlanan birçok konuyla ilgili tanıtım kitapçığıdır. Geleneksel olmayan, görsel olarak yoğun, bulmacayı içeren bir bulmaca, şaka, standart olmayan tasarım ve düzen içeren bir okuyucu ve okuyucuyu belirli bir konuya sokmak için ilgi çekici bir konuşma tarzı vurgulamaktadır.

Her genel yeniden kullanılabilir çözüm bir tasarım deseni olarak kabul edilebileceği için "tasarım deseni" terimi biraz belirsizdir. Etiketi yukarıda listelediğim dikkat çekici kitaplardan birinde ve daha özel olarak Çetenin Dördü ve Fowler kitaplarında açıklanan çözümlere uygulama eğiliminde olduğumu her zaman fark ettim. Tasarım kalıpları benzersiz bir geliştirme sürecini takip etmiyor, çok fazla yeniden kullanılabilen normal yazılım çözümleri ve tanımlanması son derece zor .

Ancak, her iki kitap için çevrimiçi katalogları dile özgü kitapların içeriğiyle karşılaştırırsanız, çoğunlukla şablon olarak kullanıldığını fark edersiniz. Bu yüzden, her iki kitabın da kanuna dayalı referanslara çok yakın olduğunu, GoF kitabının da her iki kitabın nesne yönelimli programlama ile sınırlı olmasına rağmen, tarihsel açıdan daha önemli olduğunu söyleyebilirim .


2
+1. Aslında sana +5 vermek istedim ama ne yazık ki izin verilmedi.
Dipan Mehta

Tüm Patern-Yönelimli Yazılım Mimarisi serisinin tamamı farklı tipteki sistemlerdeki modeller ile ilgilidir - Cilt 1, etki alanlarını kesip alan mimari desenler ve modeller, Cilt 2 eşzamanlı sistemler hakkında, Cilt 3 ise ağ / dağıtık sistemlerdeki kaynak yönetimi ile ilgilidir. Cilt 4, dağıtılmış sistemler ile ilgilidir ve Cilt 5, kalıp dilleri ile ilgili diğer 4 cilt için bir referansla ilgilidir. Soru göz önüne alındığında, Cilt 5'in de uygulanabilir olabileceğini düşünüyorum, ancak bununla fazla zaman geçirmedim ... henüz.
Thomas Owens

@Yannis ve baş önce genellikle statik yazılan dilleri temel alır. Python gibi dinamik diller için iyi kitaplar var mı?
ravi404



23

Head First Tasarım Desenleri

Herhangi bir anda, dünyanın herhangi bir yerinde biri, sahip olduğunuz aynı yazılım tasarım problemleriyle mücadele eder. Tekerleği (veya daha kötüsü, patlak bir lastik) yeniden icat etmek istemediğinizi biliyorsunuz, bu nedenle Tasarım Desenleri'ne bakıyorsunuz - aynı sorunlarla karşılaşanlar tarafından öğrenilenler. Tasarım Desenleri ile zamanınızı başka bir şey için harcayabileceğiniz başkalarının en iyi uygulamalarından ve deneyimlerinden yararlanabilirsiniz. Daha zor bir şey. Daha karmaşık bir şey. Daha eğlenceli bir şey.

Önemli olan kalıpları öğrenmek istersiniz - neden kullanmaları, ne zaman kullanmaları, nasıl kullanmaları (ve ne zaman kullanmamaları gerektiği). Ama sadece kalıpların bir kitapta nasıl göründüğünü görmek istemezsiniz, onların "vahşi doğada" nasıl göründüklerini bilmek istersiniz. Kendi ortamlarında. Başka bir deyişle, gerçek dünyadaki uygulamalar. Ayrıca, Java API'sinde kalıpların nasıl kullanıldığını ve Java'nın yerleşik kalıp desteğinin kendi kodunuzda nasıl kullanılacağını da öğrenmek istiyorsunuz.

Gerçek OO tasarım ilkelerini ve patronunuzun miras hakkında söylediği her şeyin neden yanlış olabileceğini (ve bunun yerine ne yapılması gerektiğini) öğrenmek istiyorsunuz. Bu ilkelerin tasarım deseni olmadan bir dereye düştüğünüzde nasıl yardımcı olacağını öğrenmek istiyorsunuz.

En önemlisi, Tasarım Paternlerinin "gizli dilini" öğrenmek istersiniz; böylece iş arkadaşınızla (ve kokteyl partisi misafirlerini etkileyerek) kendinize ait kalabilmeniz için rahatça Command, Facade, Proxy ve Bir martini yudumları arasında fabrika. Singleton'un neden göründüğü kadar basit olmadığını, Fabrikanın ne kadar yanlış anlaşıldığını ya da Dekoratör, Cephe ve Adaptör arasındaki gerçek ilişkiyi nasıl anladığınızı kolayca anlayacaksınız.

İle Baş İlk Tasarım Kalıpları , sen Dekoratör "Alım satım Spaces" gösterisinden bir şey olduğunu düşünerek utanç önlemek edeceğiz ...


Bu. Bu çok erişilebilir bir okuma ve yazılım mühendisliğine yaklaşım şeklimi tamamen değiştirdi.
GS,

2
Tüm ilk kafa serisi, özellikle devs başlatmak için harika.
Thomas Hisse Senedi

2
Kitabı seviyorum, ama kesinlikle kapaktan nefret ediyorum! Benim bir sigara programcı meslektaşı geçen gün ofisime yürüdü kitabı gördü ve dedi ki "Head First Tasarımcı Desenler? Moda işine gidecek misin?"
Pete

1
@Pete Kapak neden sizi daha fazla belaya sokabilir? Görünüşe göre ikili bir hayat yaşıyor. fishbowl.pastiche.org/2005/08/12/…
Gordon

10

Evet, tasarım desenleri hakkında iyi bilinen bir kitap var: Tasarım Desenleri: Yeniden Kullanılabilir Nesne Yönelimli Yazılımın Elemanları ve yazarlar genellikle "Dörtlü Çete" (GoF) olarak adlandırılır ve tasarım desenleriyle ilgili neredeyse tüm metinlerde referans alır.



Bu tasarım desenleriyle ilgili bir kitap değil . Bu bir kalıp kataloğu . Tasarım modellerine başlangıçta kısa bir giriş var, ancak girişin yeterli olduğunu sanmıyorum.
Jörg W Mittag

@ JörgWMittag Tasarım desenleri yaratma konusunda benzersiz bir işlem yoktur, tasarım desenleri nispeten küçük yeniden kullanılabilir çözümlerdir. Tasarım kalıpları, normal yazılım geliştirme süreçleri aracılığıyla yaratılır; onları farklı kılan en büyük yeniden kullanılabilirlik olmalarıdır. Tek ilgili benzersiz süreç, bir çözümü tasarım deseni olarak tanımlamaktır ve kataloglar da bunu en iyi şekilde yapar.
yannis

9

Tasarım desenleri: yeniden kullanılabilir nesne yönelimli yazılımın unsurları

alt metin

Gönderen wikipedia :

Tasarım Desenleri: Yeniden Kullanılabilir Nesne Yönelimli Yazılımın Elemanları, yazılım tasarımındaki sık karşılaşılan sorunlara yinelenen çözümleri açıklayan bir yazılım mühendisliği kitabıdır. Kitabın yazarları, Grady Booch'un önsözüyle Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides. Yazarlar genellikle Dörtlü Gang, GoF veya Go4 olarak adlandırılır. Kitap iki bölüme ayrılmıştır; ilk iki bölüm, nesne yönelimli programlamanın yeteneklerini ve tuzaklarını ve 23 klasik yazılım tasarım modelini anlatan diğer bölümleri araştırmaktadır. Kitap C ++ ve Smalltalk'taki örnekleri içerir.


3

Çevresindeki en iyi tasarım deseni web sitelerinden biri, ilk wiki olan Ward's Wiki'dir. İçinde iyi bir başlangıç ​​sayfası için http://c2.com/cgi/wiki?HistoryOfPatterns adresine bakın .

1987'de Ward ve Kent, Tektronix'in tasarımını bitirmekte zorlanan Yarı İletken Test Sistemleri Grubu'na danışmanlık yapıyordu. Çalışmakta oldukları kalıpları denemeye karar verdiler. Bir binanın işgalcilerini tasarlaması gerektiğini söyleyen Alexander gibi, Ward ve Kent de kullanıcıların temsilcilerinin (bir antrenör ve saha mühendisi) tasarımı bitirmesine izin verdi.

Ward acemi tasarımcıların Smalltalk'ın güçlü yanlarından yararlanmalarına ve zayıflıklarından kaçınmalarına yardımcı olan beş kalıplı bir "dil" buldu.

Ward ve Kent, kullanıcılarının tasarladıkları arayüzün (kuşkusuz Spartalı) şıklığına hayran kaldılar. Bu deneyin sonuçlarını Orlando'daki OOPSLA 87'de bildirdiler. Panel pozisyonu yazdılar ve Norm Kerth'in nesnelerin nereden geldiği atölyesinde sunuldu. Yüzleri mavi oluncaya kadar kalıpları konuştular ve çok fazla anlaştılar, ancak daha somut kalıplar olmadan kimse imzalamıyordu.

Bu arada, Erich Gamma, doktora tezinin bir parçası olarak ET ++ 'da nesne yönelimli tasarım hakkında yazmak ve yansıtmakla meşguldü. Erich, yinelenen tasarım yapılarının veya modellerinin önemli olduğunu fark etti. Asıl soru, onları nasıl yakalayıp ilettiğinizdir.

Bruce Anderson, ErichGamma'nın bulunduğu TOOLS 90'da bir konuşma yaptı; Erich konuşmayı beğendi. Bruce, EcoopOopsla90'da (Ottawa) bir bildiri yayınladı ve Erich Gamma, Richard Helm ve diğerlerinin kalıplar hakkında tartıştıkları bir Mimari El Kitabına Doğru adlı bir BOF yayınladı . Richard ve Erich ilk tanıştığında, yeniden kullanılabilir OO yazılımı yazmanın ardındaki temel fikirler hakkında ortak fikirlerini paylaştıklarını fark ettiler.

ECOOP'91'den hemen önce, Erich Gamma ve Richard Helm, Zürih'te bir yaz gününün tepesinde oturan, sonunda DesignPatterns olacak kalıplar kataloğunun çok mütevazi başlangıçlarını bir araya getirdiler ...

Bruce'un 1991'de yürüttüğü OOPSLA atölyesinde işler gerçekten yuvarlandı. Tesadüfen Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides oradaydı; daha sonra Tasarım Desenleri kitabını yazan Dört Çetesi olacaklardı ...


2

Ben düşünüyorum Patterns için Refactoring belirli tasarım / kod GoF kitapta desenleri doğru refactored nasıl açıklanır çünkü yararlı olabilir. Bu, ilk öğrenme eğrisinin üstesinden gelmeye yardımcı olabilir. Oh ve ayrıca 'Desen-mutluluk' üzerine tefekkür :)

İyi bir okuma için ilk üç cilt Desen Odaklı Yazılım Mimarisi'ni bulabilirsiniz.


1

Tasarım desenleri

Bu eğitim sitesi aşağıdaki alt bölümleri içermektedir.

  • Her tasarım modelinin amacı
  • Tasarım deseni için gerçek dünya yapısı
  • Bir Problem ifadesi
  • Problem hakkında detaylı tartışma
  • Bir kalıba nasıl ulaşılacağına dair kontrol listesi
  • Desene ulaşırken başparmak kuralları.
  • C #, C ++, Delphi, Java ve PHP içeren tasarım deseni için kod parçacıkları

Bu site ayrıca Anti Patterns, UML ve Refactoring ile ilgili rehber içerir.


SourceMaking sitesi ilk bakışta basit görünüyor, ancak gerçekten harika bir referans. Tasarım kalıplarının yanı sıra, bazı geliştirme, mimari ve proje yönetimi karşıt kalıpları çok komik. Yenilenmiş çözümler, raylardan çıkan bir toplantıyı kurtarmanıza yardımcı olabilir. (Tasarım deseni referansı için fena değil)
ne olursa olsun

1

Orijinal kitap, "Tasarım Desenleri: Yeniden Kullanılabilir Nesneye Yönelik Yazılımın Öğeleri", nesne yönelimli tasarım desenleri için iyi bir kaynaktır.

Orada başka birçok kitap var. Hızlı bir referansa ihtiyacım olduğunda ve GoF kitabım erişilemez olduğunda, Wikipedia normalde bu ve diğer tasarım kalıpları hakkında yeterli bilgiye sahiptir.

Bunlar benim kullandıklarım. İnsanların model formatını proje yönetimi gibi başka şeylere de uygulamaya başladığı da belirtilmelidir.

Bilmeniz gereken antipatterns hakkında bilgi edinmek isterseniz, iki bölümden "AntiPatterns: Refactoring Yazılımı, Mimariler ve Krizdeki Projeler" ve "Refactoring: Mevcut Kod Tasarımını İyileştirme" başlıklı iki kitap var. kod kokuyor, antipatterns için başka bir isim.


1

"C # 'da Çevik İlkeler, Desenler ve Uygulamalar" Robert C. Martin. Ben de kitabın bir Java versiyonuna sahip olduğunu düşünüyorum.

Ayrıca, bir model değil, fakat Etki Alanına Dayalı Tasarım, tüm DDD yaklaşımını izlemeseniz bile harika konseptlere sahiptir.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

1

Özellikle C ++ 'daki tasarım modelleriyle ilgileniyorsanız , Andrei Alexandrescu'dan Modern C ++ Design'ı deneyin .

Bu kitap, C ++ 'da Factory, Singleton ve Visitor gibi sık kullanılan kalıpların nasıl uygulanacağı hakkında konuşur. Ayrıca akıllı işaretçiler, şablon metaprogramlaması ve politika temelli sınıf tasarımı gibi C ++ 'a özgü konular hakkında da konuşur.

Kitap yazarı, onun için bilinen yetkili bir uzmandır .

şablon metaprogramming yoluyla uygulanan politika tabanlı tasarım konusunda öncü çalışma. Bu fikirler Modern C ++ Design adlı kitabında dile getiriliyor ve ilk olarak Loki programlama kütüphanesinde uygulandı. Aynı zamanda MOJO kütüphanesinde “hareket yapıcıları” kavramını uyguladı. C / C ++ Users Journal'a "Jenerik <Programming>" byline altında katkıda bulundu ...


1
Ne yaptığı ve ne işe yaradığı hakkında daha fazla bilgi verir misiniz? Yığın Borsası'nda "yalnızca bağlantı yanıtları" oldukça açık değildir
gnat

@gnat: bu nasıl?
Dima

Son düzenlemen kesinlikle bana bir gelişme gösteriyor. Cevap okuyucuları muhtemelen daha ayrıntılı bir açıklama yararlanacak rağmen olduğu Aleksandresku
tatarcık

@gnat: Açıkça kim olduğunu bildiğiniz için, cevabımı düzenlemek için çekinmeyin.
Dima
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.