Tasarım Desenleri: Onları öğrenmeli miyim? [kapalı]


13

Bu yüzden arka arkaya iki soru sormak biraz garip, ama çok ilgili değiller ve bunları birleştirmek istemedim, ama soruları spamlamıyorum, söz veriyorum!

Her neyse, yeni bir üniversite mezunuyum ve eğitimim sadece tasarım desenlerine değindik ... birkaç basit olanı uyguladık, daha karmaşık olanların olduğu gerçeğine değindik ve eğer biz GoF kitabına başvurmamız istendi. daha fazla bilgi edinmek istedim. Sorum şu: GoF kitabındaki kalıpları öğrenmeye değer mi? Bana göre, klasik bir desene uygun bir problemi denemek ve yapmak her zaman sezgisel görünüyordu, ama açıkçası kitap ve desenler bir nedenden dolayı ünlüdür. Onları öğrenmem gerekecek kadar mı ortaya çıkıyorlar?

Tekrar teşekkürler!


[Tasarım desenleri] olarak etiketlenen diğer soruları okudunuz mu?
Peter Taylor

Göndermeden önce önerilenler çoğunlukla iyi kaynaklar istiyor ya da bunları öğrenmenin en iyi yolu hakkında konuşuyor gibi görünüyordu. Onları kendim öğrenebilirim, sadece klasik modellerin nasıl uygulandığını merak ediyorum. Üzgünüm, bu bir repost ise, kapatmaktan çekinmeyin.
prelic

1
Bunun tam bir repost olduğunu düşünmüyorum, ancak ihtiyacınız olan şeyi merak ediyorum, örneğin programmers.stackexchange.com/questions/84098/… programmers.stackexchange.com/questions/78825/…
Peter Taylor

En azýndan birisi koleje referans verdi. İkinci kolej sonrası işim için röportaj yapmaya başlayana kadar bunu duymadım (görünüşe göre uygun değildim çünkü singleton'ı duymadım, desenin mekaniğini bilmiyordum).
Mayo

Yanıtlar:


12

Her zaman oldugu gibi

Değişir

Tasarım modellerini tanıyabileceğiniz veya hatta kullanabileceğinize göre ne kadar OOP yaptığınıza bağlıdır.

Doğru öğrendikten sonra kalıpları uygulayıp uygulayamayacağınıza ve bir çekiçle atasözü olan adam gibi fındıklara gidip gitmeyeceğinize bağlıdır.

Öte yandan ... beş parmak!

Birkaç yıl ciddi bir OOP çalışması yaptıysanız veya sizi raylarda tutmak için güvenilir bir mentorunuz varsa veya sadece OOP-nerd okumasını seviyorsanız, o zaman elbette kitabı satın alın ve inceleyin.

Desenleri bilmenize yardımcı olur, böylece onları ne zaman kullanacağınızı ve ne zaman kullanmayacağınızı anlarsınız.


Ben de düşündüm. Sadece meraktan, en önemlisi kavramsal olarak ya da en popüler olarak düşüneceğiniz birkaç tanesini seçmek zorunda olsaydınız, bunlar ne olurdu?
prelic

1
@prelic: singleton - etrafındaki tartışmalardan dolayı - ve ziyaretçi - çok kullanışlı olduğu için
Steven A. Lowe

2
@prelic: Strateji ve gözlemci ile başlardım - çünkü çok darn kullanışlılar
Falcon

1
+1 Bu konuda şimdiye kadarki en iyi yorum! Düzenli kullandığım kalıplar: Komut, Adaptör ve Fabrika Yöntemi.
Oliver Weiler

Nefes almak için kullandığım olanlar Singleton, Template Method, Decorator ve Composite'tir. Yineleyici, ama neredeyse her zaman java.util.Iteratorbir desen gibi görünmediği bir kılığında . Strateji, Ziyaretçi ve Cephe onlara ihtiyaç duyduğumda bilinçli olarak uyguladığım kişiler olacaktı.
Tom Anderson

21

Evet, onları öğrenmelisin.

Biraz deneyim kazandıktan sonra onları tekrar ziyaret etmek daha mantıklıdır , böylece onları bildiklerinizle karşılaştırabilirsiniz. Bazı desenler için bunun kendinizi keşfettiğiniz bir şey olduğu ortaya çıkacaktır, ancak kullanımı, ödünleşmeleri, varyantları ve benzeri hakkında daha genel bir şey öğreneceksiniz. Diğerleri, başa çıktığınız sorunları doğrudan ele alıyor ve size bilmediğiniz zarif bir çözüm gösteriyor olabilir.

Kalıpların büyük çoğunluğu çok yararlı ve yaygındır . Diğerleri o kadar popüler olmayabilir, ancak yine de mükemmel uyum sağladığı için dar kullanımları vardır.

Okumaya değer olmasının bir nedeni daha var: Size nasıl düşüneceğinizi öğretecek . Tabii, bu gümüş bir kurşun değil, ama yine de paha biçilemez bir ilham kaynağı.

Son fakat en az değil, asla , asla, hiçbir koşulda, bir modeli veya araca uyacak bir problem yapmaya çalışın . Bu çok kötü ve tehlikeli bir düşünce! Aracın nasıl çalıştığını anlayın ve problemle başa çıkmak için akıllıca kullanın, asla başka şekilde değil.

Ne kadar iyi araç bilirseniz o kadar iyidir. Bazen bir araç düşünmenize ilham verebilir (bir sorunu doğrudan çözmek yerine), başka bir zaman birkaç tanesini harika bir çözüm için birleştireceksiniz.

GOF kitabı, günlük olarak kullandığımız birçok yararlı aracın harika bir kaynağıdır .


İyi tavsiye için teşekkürler! Keşke birden fazla onay işareti verebilirdim
prelic

6

Tasarım Patters hakkında biraz bilgi sahibi olmanın en önemli yararı, terimlerin ne anlama geldiğini bilmenizdir. Başka bir deyişle, ortak kelimeleri biliyorsunuz .

Bu, benim için, tüm Tasarım Desenleri kargaşasının en önemli başarısıdır, sadece belirli desenlerin adlarını kullanabileceğiniz ortak bir kelime dağarcığı ortaya çıkmıştır ve diğerleri bunu açıklamak zorunda kalmadan ne hakkında konuştuğunuzu hemen bilir. . Kalıpların tarif ettiği şeyler çoğu programcı tarafından iyi bilinir, ancak başkalarına ne demek istediğinizi açıklamak zaman alır, bu nedenle iletişimin kalıp adlarını tanımasını kolaylaştırır.

Örnekler Ziyaretçi, Singleton ve Dekoratörlerdir.

Başka bir deyişle, en azından isimlere ve yaptıklarına aşina olmanızı öneririm.


5

EVET ama temkinli!

YES kısmı:

Bazen tasarımlarımızda sorunlarla karşılaştık. Bazen bu sorunlar çok yaygındır, bu nedenle bir tasarım deseni bu sorunlar için size iyi test edilmiş çözümler sunar. Tasarım desenlerini öğrenmenin temel faydaları, bir tasarım çözümünü çok daha hızlı bir şekilde ortaya çıkarabilmenizdir ve iş arkadaşlarınız tasarım deseni lingo'nun farkındaysa, bir çözümü de çok daha hızlı açıklayabilirsiniz.

Dikkatli kısmı ile:

Tasarım desenleri çözümlerinizin kutsal kâsesi olmamalıdır. En basit (KISS) çözüm daha arzu edilir ve çoğu zaman tasarım desenleri işleri daha karmaşık hale getirir. Tasarım desenleri öğreniyorsanız, anti-desenleri de öğrenin . Tasarım kalıplarına aykırı bazı eski insanlar biliyorum ve onlarla bir dereceye kadar hemfikirim çünkü çok fazla kodlama deneyimine sahip olmadığınızda, tasarım deseni teorisinin yükü olduğunda, sizin ve sizin için çok daha zor hale getirebilirsiniz. takım.

Son olarak, sadece bir tasarım modeline uymak için çözümünüzü uydurmanız / değiştirmeniz gerektiğini düşünmeyin. Aksine, bir tasarım desenini çözümünüze sığacak şekilde bükebilirsiniz. Belirli bir probleminiz için daha iyi bir çözümünüz olduğu sürece bir tasarım deseni tarifinin her bileşenini kullanmıyorsanız sorun değil. Tasarım kalıplarını çözümünüzün kuralı olarak değil, bir öneri olarak düşünün.


1

Net Hedeflerin patterleri düşünme yöntemini en faydalı bulduk. GoF kitabını çok okuyan insanlar, gösterdikleri yapıların tasarım gösteriminde ve kodda kalıplar olduğunu ve her zaman böyle göründüklerini varsaymaya başlarlar. Ona bakmanın farklı, tartışmasız daha iyi bir yolu var.

Desenler, çeşitli problemleri çözmek için kullanılabilecek formül setleri değil, belirli soyut formüller ile çözülebilen benzer problem kümeleridir. Bunun anlamı, bir tasarım yapmaya bile başlamadan önce desenin zaten orada olmasıdır, o zaman tasarımcının amacı onu bulmaktır, onu dayatmak değil.

Dahası, birçok insan kalıplara bakar ve "Ah, bunu çözdüm ... Aptal kalıp kullanmadım." Mesele şu ki, "...." neredeyse kaçınılmaz olarak belirli bir örüntü çözümünün AN uygulamasını tanımlar. Örneğin, bir dizi işlev işaretçisi, geleneksel tarifin görünüşü bu olmasa da bir Sorumluluk Zinciri işlevi görebilir.

Bunu göz önünde bulundurarak, desen çalışmanızdaki odak, desenlere değil sorunlara odaklanmalıdır. Kalıpların motive edici faktörlerini ve bu faktörleri nasıl ele aldıklarını öğrenin. Bunu yapmak, problemdeki desenleri görmenizi ve daha sonra bunları belirtmenizi sağlar. Bu, kalıpların tasarım hakkında konuşmak için bize verdiği dil ile birlikte, şu anda karşılaştığınız çeşitli zorluklara cevap vermek için uygun bir tasarımı ortaya çıkarmanızı sağlar.

EVET, kısacası, öğrenme kalıpları sadece buna değmez ... onları öğrenmeyerek kendinizi sınırlarsınız. "Bana bir ziyaretçi gibi gözüküyor" derken tüm motive edici prensipleri ve çözümün genel şeklini tanımlamak istemiyorum.

Web siteleri: http://www.netobjectives.com/PatternRepository/index.php?title=Main_Page


Büyük kaynak, bu bağlantı, anahtar tasarım modellerinin çoğunun kısa bir açıklamasıdır. Bir kitap kadar derinlemesine değil ama avantaj bu.
Haziran'da

1

GoF tarafından açıklanan Tasarım Desenleri, OO paradigmasının doğal bir uzantısıdır. OOP'nin hedeflerini (kapsülleme, endişelerin ayrılması, KURU ilkesi, modülerlik, vb.) Hedeflerini tam olarak anlayamıyorsanız, Tasarım Desenlerini başarıyla uygulamaya çalışmak çok mantıklı değildir.

Bununla birlikte, ayaklarınızı gerçek dünyadaki OOP'da ıslatırsanız ve OOP değerlerine sadık kalmaya çalışırsanız, kaçınılmaz olarak GoF tarafından açıklanan durumlara girersiniz ve şansı onlara benzer çözümler icat edersiniz. Birçok benzer sorunu çözdükten sonra, kalıpların ortaya çıktığını görmeye başlayabilirsiniz; bu noktada kitabı okumak mantıklıdır; ideal olarak, bir tanıma duygusuna sahip olacaksınız ve önerilen kalıpların zarafetini ve temizliğini hemen takdir edeceksiniz. Şansınız, bu desenlerden bazılarını beyinsiz olarak da düşünürsünüz (ki onları tanıdıktan sonra birçoğu vardır). Ayrıca, belirli bir durumda belirli bir modelin geçerli olup olmadığını iyi bir şekilde değerlendirebilirsiniz.

Ve işte bir uyarı daha: Tüm bu kalıpları bildiğiniz için, bunları her yere uygulamanız gerektiği anlamına gelmez. Bazıları oldukça zekidir ve insanlar korkunç derecede uygunsuz olsalar bile onları kullanmaya eğilimlidirler, Singleton deseni en ünlü örnektir (Singleton tartışmasının çoğu uygunsuz kullanımdan gelir, örneğin, bir tanesine sahip olmanın hiçbir faydası olmadığında -sadece durum kısıtı).


0

Tasarım kalıpları tasarım problemlerini çözmeye çalışır.

  • Öncelikle OOP dilleri için AFAIK yapıldı.
  • Fonksiyonel programlamada bazı problemler mevcut değildir (Komut Deseni, birinci sınıf fonksiyonların nasıl yapılacağıdır, Strateji Deseni, yüksek dereceli fonksiyona yaklaşır ...). Bu modeller, işlevselliğe ihtiyaç duymayan diller içindir (çoğunlukla OOP).
  • Alfabetik olarak sıralanırlar. Birkaç model başkalarının bileşimidir veya fikirler daha önce orada olanlardan oluşur.

Bazı fonksiyonel programlama, UML, veritabanı tasarımı, veri yapıları ve algoritmaları bildikten sonra kalıpları öğrendim. Aslında bu kalıpları hile sayfasında tasarladım ve çoğunu zaten tanıdığım başımı salladım. Bazıları singleton veya "iletişim" kalıpları (ziyaretçi, arabulucu) gibi gerçekten güzeldi ...


Tasarım kalıpları açıkça tasarım problemlerini çözmeye çalışmaz. GoF, kendilerini gerçek dünya programlamasında gözlemledikleri ortak kalıplar olarak tanımlar; Amaç, diğer programcıların benzer durumları tanıması ve yaygın hatalardan ve tuzaklardan kaçınabilmesinin yanı sıra alternatif çözümlerin farkında olabilmesi için bu kalıpları tanımlamaktır.
tdammers

0

Çok az tecrübeyle tasarım desenlerini uygulamanın ne kadar tehlikeli olabileceği konusunda diğer bazı cevaplarda yapılan hususlara katılıyorum.

Yine de, GoF kitabının en azından ilk bölümünü okumanızı şiddetle tavsiye ederim. İlk bölüm tasarım desenlerini tanıtacaktır, ancak daha çok OO tasarım ilkeleri ile ilgilidir ve bu nispeten az deneyime sahip olsa bile okumak ve anlamak için faydalı olmalıdır. (Hatırladığım bazı temel fikirler arasında "değişen kavramları kapsüllemek", "kalıtım hiyerarşileri geniş fakat derin olmamalıdır" sayılabilir.) İşin çoğunlukla 23 deseni ile bilinmesi utanç verici - OO tasarım ilkeleri tartışması bu kalıpları bilgilendiren de son derece değerlidir.


0

Sorum şu: GoF kitabındaki kalıpları öğrenmeye değer mi?

Kesinlikle! Sadece yazılım tasarım modellerini değil, genel olarak tasarım tekniklerini de öğrenmelisiniz. Sık karşılaşılan sorunlara ortak çözümler öğrenmek harika bir başlangıçtır. Özellikle kalıpları ve bunların değiş tokuşlarını araştırmaya başladığınızda.

Onları öğrenmem gerekecek kadar mı ortaya çıkıyorlar?

Orijinal Gang of Four kitabı, birçok yazılım projesini inceleyerek ve bir dizi geliştiricinin problemleri çözmek için kullandığı teknikleri görerek geliştirilmiştir. Yazarlar çok iyi olmayan birkaç tekniğin yanı sıra çok ayrık projelerde uygulanan bir sayı fark ettiler ve etki alanından bağımsız olarak bunları daha fazla kullanmak için çalıştılar.

Klasik bir desene uygun bir problemi denemek ve yapmak her zaman karşı sezgisel görünüyordu

Bu büyük bir problem. Çözüme uygun bir sorun oluşturmazsınız. Bunun yerine, Dörtlü Çete tasarım desenleri kitabında her desen için bir "sorun" bölümü bulunur ve diğer desen kataloglarında her bir deseni ne zaman uygulamanız gerektiğini açıklayan benzer bölümler bulunur. Ayrıca, kalıbı kullanmanın "sonuçlarını" açıklar - bir sonuçtan kaçınmaya çalışıyorsanız, kalıbı kullanmak en iyi fikir değildir.

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.