Desen ve İlke Arasındaki Fark


20

Nesneye Dayalı Tasarım Desenleri ve İlkeleri arasındaki fark nedir? Farklı şeyler mi? Anladığım kadarıyla, her ikisi de ortak bir hedefe (örneğin esneklik) ulaşmaya çalışırlar. Öyleyse bir örüntünün bir prensip olduğunu söyleyebilir miyim?

Tasarım İlkesi = KATI (yani Bağımlılık Ters Çevirme İlkesi)

Tasarım Deseni = Gof (yani Soyut Fabrika Deseni)

Yanıtlar:


24

Hayır, aynı değiller.

Desenler, nesne yönelimli programlama sorunlarına ortak çözümlerdir . (İşlevsel veya bildirimsel programlama için benzer kitapların farkında değilim.) Fikir, 1995'teki Dörtlü Gang tarafından ünlü "Tasarım Desenleri" kitabında kristalleştirildi.

Andre'nin belirttiği gibi, desenler her paradigmada yaygındır. Önceki açıklamamı tekrarlayacağım: İşlevsel veya bildirimsel programlama için benzer kitapların farkında değilim , ancak Andre cehaletimi aşağıda sağladığı bağlantıyla düzeltti. (Teşekkürler Andre.)

İlkeler belirli diller veya paradigmalar hakkında daha az, daha geneldir. "Kendinizi Tekrarlamayın" - KURU prensibi - tüm programlama için geçerlidir.


4
Desenler her paradigmada mevcuttur. Jeremy Gibbons bir kitap olarak adlandırılan yazıyor Fonksiyonel Programlama Kalıpları (ve bu konuda blogging burada ). Desenler sadece ismin söylediği şeydir - benzer sorunları çözen yinelenen tasarımlar. Her yerdeler, ama onları her zaman tanımayabilirsiniz.
André Paramés

@ AndréParamés Hızlı bir bakış, Jeremy Gibbons'ın tasarım kalıplarından değil dil deyimlerinden bahsettiğine inanmamı sağlıyor .
Izkata


19

Bu kavramlar aynı değildir:

* Tasarım İlkesi: * Yazılım tasarım ilkeleri, kötü bir tasarıma sahip olmamak için bize yardımcı olan bir dizi yönergeyi temsil eder. gibi: Açık Kapalı Prensibi

* Tasarım Deseni: * Tasarım Deseni, yazılım tasarımında belirli bir bağlamda sık karşılaşılan bir soruna genel olarak yeniden kullanılabilir bir çözümdür. Beğen: Singleton


7

Paternler ilkelere, paternler üzerinde uygulamaların ne olduğudur.

Bir ilke, sonunda fabrika yöntemleriyle bir sınıf olarak uygulanan bir "fabrika" örüntüsü ile gerçekleştirilebilen "dolaylılık" olacaktır.


3

Prensipler kurallar, desenler ise somut örnekleridir.


1
bazı örnekler verebilir misin?

Lütfen Fabrika veya Sorumluluk Zinciri veya Flyweight gerektiren ilkeyi bize bildirin.
duffymo

2
@duffymo Kuyu Fabrikası örneğin Bağımlılık Ters Çevirme Prensibini (enjeksiyon değil) izler; hem istemci hem de örnek, soyutlamaya - arayüze bağlıdır. Sorumluluk Zinciri, gevşek birleştirme ve kontroluların ayrılması ilkelerine dayanmaktadır. Flyweight, sadece performans artışı olduğunu düşünüyorum.
m3th0dman

3

Desenler ilkelerden daha üst düzey şeylerdir. Desenler belirli sorunları çözer. İlkeler, bağlamdan bağımsız olarak her yerde uygulanabilir. Aslında ilkelere dayanan kalıplar (SRP, DRY, vb.)

EG Strateji modeline bakalım. Bir algoritma ailesi tanımlar, her birini kapsül içine alır ve bunları değiştirilebilir hale getirir. Burada, üst düzey algoritma kavramınız var. Devlet modeli ile üst düzey bir devlet kavramı vardır. İlkelerle, üst düzey konseptleriniz yoktur. İlkeler, kalıplar tarafından hedefe ulaşmak için kullanılan yapı taşlarıdır. Strateji kalıbını uyguladığınızda SOLID kullanırsınız:

  • SRP - algoritmadan sorumlu olan kodu tanımlar ve başka bir koddan çıkarırsınız.
  • OCP - tüm farklı algoritmaları temsil eden ve onu kullanan soyutlamayı tanımlarsınız
  • LSP - istemci kodunda somut algoritma sınıfları kullanmazsınız, sadece soyutlama

5
Aslında kalıplar ilkelerden daha düşük düzeydedir. Yani, bir kalıp, gerçek uygulamaya bu bağlamda bir prensipten daha yakındır. Başka bir deyişle, ilkeler genel tasarım yönergeleri ve belirli bir sınıf problemine uygun çözümleri temsil eden kalıpları ifade eden kalıplardan daha soyuttur.

@Jarkko örneğime bakın. Seviye hakkında konuştuğumda, kalıpların tam tersine değil ilkelere dayandığını kastetmiştim. Tuğla, inşa etmekten daha üst düzey bir şey değildir.

4
Bununla ne demek istediğinizi görebiliyorum ve konu hakkındaki düşüncelerinizi anlıyorum. Bununla birlikte, yazılım bağlamında "yüksek seviye" ve "düşük seviye" kavramlarının ortak anlamının tersidir. (Herhangi bir nedenle @ etiketleyemiyorum.)

1
"Desenler ilkelerden daha üst düzey şeylerdir". Farklılık için yalvarıyorum ==> Bir model gerçekleşmeye yakın (yani düşük seviye), bir ilke ise yüksek seviye kuraldır.
Raúl

2

Başlangıçta Mimari için belgelenmiş desenler. Mimaride, kapının bir odaya yerleştirilmesinden bir köyün yerleşimine kadar değişen şeylere uygulayın.

Dörtlü Çete, fikri Nesneye Yönelik Programlamaya uyguladı. Bir sorunu çözmek için kullanılabilecek birden fazla model olabilir, ancak her modelin belirli bir uygulaması olacaktır. Diğer programlama yaklaşımlarında kalıplar vardır, ancak geçerli kitapların farkında değilim. Diğerlerinin de belirttiği gibi, Desenler belirli uygulamaları kapsar. Bir deseni uygulanmadığında kullanmak genellikle bir anti-desen olarak kabul edilir.

İlkeler uygulamayı kapsamaz, ancak standart uygulama yaklaşımları olabilir. Prensipler spesifik problemlerden ziyade genel konuları kapsamakla ilgilidir. Denetimi Tersine Çevirme için en az üç uygulama yaklaşımının farkındayım. DRY (Kendini Tekrar Etme) için, birkaç tane kullanmama rağmen, tekil bir uygulama yaklaşımı bilmiyorum.

Düşünmek

  • Bir program geliştirmek için tek yaklaşım olarak Soyut Fabrika Deseni gibi bir Desen kullanmanız istenmiştir. Bu uygun olur mu? Hayır, o zaman bir Desen daha olasıdır.
  • Tüm bileşenlere DRY uygulaması istediniz mi? Bu uygun olur mu? Evet, o zaman bir Prensip olma olasılığı daha yüksektir.

1

OO Tasarım İlkesi—

OO prensibi, OOP konseptini sağlayan bir dizi kılavuzdur. OOP konseptine dayanarak, bu daha iyi bir yol, daha iyi bir tasarım tasarlamanın yollarını tanımlar. Temel OO tasarım prensibi SOLID'dir.

Tasarım deseni, tasarım sorununa genel bir çözüm sağlar. “Tasarım deseni” öğesinin öğeye yönelik kelimeye de uygulanabileceğini unutmayın. Dolayısıyla bir OO tasarım örüntüleri (OODP'ler) nesneye yönelik tasarım tabanlı OO prensibine genel bir çözüm sağlayanlardır. Tasarım kalıpları keşfedildi, icat edilmedi. OODP'leri tanımlamanın birkaç yolu vardır ve en ünlüsü BSC'dir [Davranışsal Yapısal Yaratıcılık].

Ayrıntılı açıklama için link aşağıdadır. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

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.