Tasarım desenleri ile mimari desenler arasındaki fark nedir?


119

İnternette tasarım kalıplarını okuduğumuzda 3 kategori olduğunu not ediyoruz:

  • Yaratılışsal
  • Yapısal
  • Davranışsal

Ancak bir yazılımın mimarisini oluşturduğumuzda aklımıza MVP, MVC veya MVVM gelir.

Örneğin, yaratım kalıpları arasında tekli kalıbı buldum , ancak MPV'mde tekli tonu da kullandım.

Öyleyse sorum şu: Bir tasarım deseni bir ürünün tüm yapısının üzerinde mi?

  • Evet ise, o zaman tekil bir tasarım deseni nasıl olabilir? Çünkü uygulamamın her yerinde kullanabilirim. Temel olarak, bellekte bir seferde yalnızca bir örnek oluşturmakla sınırlıdır, ancak bu kavram yazılımın nasıl tasarlandığını tanımlamıyor mu?

  • Değilse, üç model kategorisinde MVP, MVC ve MVVM nerede? Yazılımın tasarımı ve mimarisi arasındaki fark nedir?



2
Tasarım deseni ve mimari desen kaynakları bu listeye göz atın github.com/DovAmir/awesome-design-patterns
dov.amir

Yanıtlar:


174

Ayrıntılı bir açıklama gerektirir, ancak bildiğim kadarıyla farkları en iyi şekilde özetlemeye çalışacağım.

desenler , programlarda bulduğunuz ortak özelliklerdir. Büyük ve karmaşık bir yapıyı parçalamamıza ve basit parçalar kullanarak inşa etmemize olanak tanır. Bir problem sınıfı için genel bir çözüm sağlar.

Büyük ve karmaşık bir yazılım, farklı düzeylerde bir dizi yapısızlaştırma sürecinden geçer. Genel olarak mimari desenler araçlardır. Daha küçük düzeyde, tasarım kalıpları araçlardır ve uygulama düzeyinde, programlama paradigmaları araçlardır.

Çok farklı seviyelerde bir model ortaya çıkabilir. GörmekFraktallere . Hızlı sıralama, Birleştirme sıralaması, bir grup öğeyi bir sırayla düzenlemek için kullanılan algoritmik kalıplardır.

Daha basit bir bakış açısı için:

  • Programlama paradigmaları - programlama diline özel
  • Tasarım desenleri - yazılım yapımında tekrar eden sorunları çözer
  • Mimari modeller - yazılım sistemleri için temel yapısal organizasyon

Deyimler , alt düzey ayrıntıları dolduran paradigmaya özgü ve dile özgü programlama teknikleridir.

Tasarım kalıpları genellikle kod seviyesi ortaklıkları ile ilişkilendirilir. Daha küçük alt sistemleri geliştirmek ve geliştirmek için çeşitli planlar sağlar. Genellikle programlama dilinden etkilenir. Dil paradigmaları nedeniyle bazı modeller önemsiz hale geliyor . Tasarım kalıpları, varlıkların bazı yapı ve davranışlarını ve bunların ilişkilerini ortaya çıkaran orta ölçekli taktiklerdir.

İken mimari desenler tasarım desenleri daha yüksek seviyede ortaklığı olarak görülüyor. Mimari modeller, büyük ölçekli bileşenleri, bir sistemin küresel özelliklerini ve mekanizmalarını ilgilendiren üst düzey stratejilerdir.

Desenler nasıl elde edilir? Vasıtasıyla:

  1. yeniden kullanımı,
  2. sınıflandırma
  3. ve nihayet ortaklığı damıtmak için soyutlama.

Yukarıda belirtilen düşünceleri takip ettiyseniz. Singleton'ın bir "tasarım deseni" olduğunu, MVC'nin ise kaygıların ayrılmasıyla ilgilenen "mimari" modellerden biri olduğunu göreceksiniz.

Okumayı deneyin:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Çok iyi yapılmış ve özenle hazırlanmış. Şimdi, herkesin terimleri buraya koyduğunuz gibi farklılaştırılmış olarak kullanmasını diledim. Cevabınızın bir baskısını pazarlama departmanımızın kahve dağıtıcısının üstündeki duvara asabilir miyim? Belki bir gün anlarlar. ;-)
ofi

@ofi: Teşekkürler! Dil yapısının kullanılması bizi hem yanıltabilir hem de bize yol gösterebilir. Bu oldukça güçlü bulduğum bir şey.
pyfunc

Röportaj Sorularından Bizi
Kurtardığınız

Güzel cevap, teşekkürler !! @ofi'nin dediği gibi, bunu yazdırıp tasarım ekibinin duvarına sabitleyeceğim.
yuvarlan

11

Tasarım Modelleri, teknik problemleri birçok kez kendini kanıtlamış bir şekilde çözmek için iyi bilinen modellerdir. Tasarım kalıpları, yeniden kullanılabilir Nesne Yönelimli yazılımlar oluşturmayı sağlayan ortak tasarım yapıları ve uygulamalarıdır. Tasarım deseni örnekleri, Fabrika Deseni, Tek Ton, Cephe, Durum vb. Tasarım desenleri, uygulama boyunca daha küçük sorunları çözmek için kullanılabilir ve genel mimariye göre enjekte etmek, değiştirmek ve eklemek çok daha kolaydır.

mimari modeller, yazılım uygulama mimarisi problemlerini çözmek için iyi bilinen modellerdir. Yazılım uygulama mimarisi, tüm teknik ve operasyonel gereksinimleri karşılayan yapılandırılmış bir çözüm tanımlama sürecidir. Uygulamanın mimarisi, kodun genel "organizasyonudur". Farklı Mimarilere örnek olarak MVC, MVVM, MVP, n-katman (yani UI-BLL-DAL) vb. Verilebilir. Mimari tipik olarak önceden karar verilmesi gerekir ve uygulama oluşturulduktan sonra çoğu zaman değiştirilmesi zordur.


1

Mimari öğeler, genellikle kutular olarak temsil edilen sınıf veya modül koleksiyonlarına yönelir. Mimari ile ilgili diyagramlar, aşağıya bakan en yüksek seviyeyi temsil ederken, sınıf diyagramları en atomik seviyededir. Mimari modellerin amacı, sistemin ana parçalarının nasıl birbirine uyduğunu, mesajların ve verilerin sistemde nasıl aktığını ve diğer yapısal endişeleri anlamaktır. Mimari desenler, her biri tipik olarak art arda daha küçük modüllerden oluşan çeşitli bileşen türlerini kullanır. Her bileşenin mimari içinde bir sorumluluğu vardır. Tasarım modelleri, daha küçük uygulama parçacıkları için düşük düzeyli veya sınıf düzeyindeki tasarım kalıplarıdır.

Daha fazla bilgi için: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Esas olarak, bu bir dil meselesi. Tecrübelerime göre, yazılım söz konusu olduğunda, tasarım ve mimari arasındaki sınır çizgisi, geniş bir nehirdir ve su seviyesinden kaynaklanan geniş bir nehirdir ve bu da esas olarak pazarlama mevsimlerinden etkilenir. Genel olarak "tasarım" terimi, yazılım ürününün davranışının son kullanıcılar tarafından tanınan güçlü bir yönü ile kullanılırken, "mimari" bir yazılımın teknik yapısını, yani bileşenleri, kütüphaneleri, protokolleri ve yerine getirmek için ihtiyaç duyduğu her şeyi ifade eder. tasarlamak. "Tasarım kalıpları" iki rol üstlenir: Birincisi, ürünler değil, standart problemler kategorisini (aşağı yukarı) çözmek için en iyi uygulamalar olarak kabul edilirler; İkincisi, geliştiricilerin iletişim kurmasına yardımcı olurlar. Bir Singleton örneğinizle kalmak, Kontrollü bir şekilde ayarlanmış belirlenmiş bir veri alanı (değişken veya her neyse) kullanarak tek bir örnek oluşturduğumuzu açıklamak yerine, sadece kelimeyi kullanarak mekaniğin ne hakkında olduğunu bilmemizi sağlar. tek, çünkü sınıfın kurucusunu koruduk vs. Yani IMHO, sorunuzun kısa cevabı: Kimin konuştuğuna bağlı. Bu biraz mantıklı mı?


0

Tasarım Modelleri , kapsamları bakımından Mimari Modellerden farklılık gösterir, daha yereldirler, kod tabanına daha az etkiye sahiptirler, kod tabanının belirli bir bölümünü etkilerler, örneğin:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Mimari Modeller kod tabanı üzerinde geniş bir etkiye sahiptir ve çoğu zaman tüm uygulamayı yatay olarak (yani bir katmanın içindeki kodun nasıl yapılandırılacağı) veya dikey olarak (yani bir talebin dış katmanlardan iç katmanlara nasıl işlendiği ve geri). Mimari Desen Örnekleri: Model-Görünüm-Denetleyici, Model-Görünüm-GörünümModel

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.