Yazılım Tasarımı ve Yazılım Mimarisi [kapalı]


342

Birisi Yazılım Tasarımı ve Yazılım Mimarisi arasındaki farkı açıklayabilir mi?

Daha spesifik olarak; birisine size 'tasarım' sunmasını söylerseniz - onların ne sunmasını beklersiniz? Aynı şey 'mimarlık' için de geçerli.

Şu anki anlayışım:

  • Tasarım: Belirli bir modül / sistemin bir parçası için UML diyagramı / akış şeması / basit tel kafesler (UI için)
  • Mimari: bileşen diyagramı (sistemin farklı modüllerinin birbirleriyle ve diğer sistemlerle nasıl iletişim kurduğunu gösteren), hangi dilin kullanılacağı, kalıplar ...?

Yanlışsam düzelt. Wikipedia'nın http://en.wikipedia.org/wiki/Software_design ve http://en.wikipedia.org/wiki/Software_architecture ile ilgili makaleleri olduğunu belirtmiştim , ancak bunları doğru anladığımdan emin değilim.


Aşağıdaki sorulardan herhangi biri yardımcı oldu mu? ;)
Patrick Karcher

Bir dereceye kadar, (kesinlikle gerçek olan) ayrımın genellikle iddiasızlıktan yapıldığını unutmayın. Hiçbir mimar, iyi bir tasarım ve inşaat anlayışı olmadan hiçbir iyi olamaz ve hiçbir tasarımcı, mimariyi makul bir şekilde anlamadan herhangi bir iyi olamaz.
Hot Licks

Bir zamanlar "bir amaca uygun tasarım" olarak tanımlanan mimariyi gördüm. Bu küçük bir sırdır, ancak iyi mimarinin nihayetinde amaç merkezli ve uygulama merkezli olması gerektiğinden, gerçek bir külçe içerir.
Hot Licks

Yanıtlar:


329

Haklısın evet. Bir sistemin mimarisi 'iskeleti'dir. Bir sistemin en yüksek soyutlama düzeyidir. Ne tür bir veri depolama mevcut, modüller birbirleriyle nasıl etkileşime giriyor, hangi kurtarma sistemleri mevcut. Tasarım desenleri gibi, mimari desenler de vardır: MVC, 3 katmanlı katmanlı tasarım, vb.

Yazılım tasarımı, ayrı modüllerin / bileşenlerin tasarımı ile ilgilidir. X modülünün sorumlulukları, işlevleri nelerdir? Y sınıfı? Ne yapabilir, ne yapmaz? Hangi tasarım desenleri kullanılabilir?

Kısacası, Yazılım mimarisi daha çok tüm sistemin tasarımı ile ilgilidir, yazılım tasarımı ise modül / bileşen / sınıf seviyesinde vurgulanır.


116
Ayrıca, mimari genellikle neyin (yapıldığı) ve nerede (yapıldığı) ilgilenir, ama asla nasıl yapılacağıyla ilgilenir. Temel ilke budur - tasarım, mimarlığın nasıl konuşmadığı (ve olmaması gerektiği) tamamlar.
Asaf R

2
Merhaba @ AsafR! bu bana mimariyi analiz olarak düşündürdü çünkü analiz neyle (bitti) ve tasarımla nasıl başa çıkacağını düşünüyor.
Chriss

2
Günümüzde insanlar arka uç sunucularını (muhtemelen bulut tabanlı) ve ön uç tasarımını (Web veya mobil) tek başına tasarlama, uygulama, bakımını kendileri yapıyorlar. Bence bunlara tam yığın geliştiriciler deniyor. Sağ?
Maziyar

1
Mimarlık, bir sistemin, bir yapının, her şey hakkında bir taslağın ana hatlarıdır. Tasarım sadece bir plan yapma faaliyetidir. Bir mimari tasarlayabilir, bir modül tasarlayabilir, hatta bir yöntem bile tasarlayabilirsiniz.
Evan Hu

2
Çünkü MVC mimari bir tasarımdır. MVC kendi içinde herhangi bir ayrıntı belirtmez. "Görünüm" bir web sitesi, bir winforms, bir konsol uygulaması olabilir. Model hemen hemen her şey olabilir, nereden geldiği hakkında hiçbir şey ifade etmez (veritabanı katmanı veya her şey).
Razzie

80

SDLC'nin (Yazılım Geliştirme Yaşam Döngüsü) bazı açıklamalarında bunlar değiştirilebilir, ancak vicdan farklıdır. Aynı zamanda: farklı (1) aşamalar , (2) sorumluluk alanları ve (3) karar verme düzeyleri .

  • Mimari daha büyük resimdir: çerçeve, dil, kapsam, hedefler ve üst düzey metodolojilerin seçimi ( Rasyonel , şelale , çevik vb.).
  • Tasarım daha küçük resimdir: kodun nasıl organize edileceğine dair plan; sistemin farklı bölümleri arasındaki sözleşmelerin nasıl görüneceği; projenin metodolojilerinin ve hedeflerinin sürekli uygulanması . Bu aşamada şartname yazılır.

Bu iki aşama farklı nedenlerle harmanlanmış görünecektir .

  1. Daha küçük projeler genellikle planlamayı aşamalara ayırmak için yeterli alana sahip değildir.
  2. Bir proje daha büyük bir projenin parçası olabilir ve bu nedenle her iki aşamanın bazı kısımlarına zaten karar verilmiştir. (Halihazırda mevcut veritabanları, sözleşmeler, standartlar, protokoller, çerçeveler, yeniden kullanılabilir kod vb. Vardır)
  3. SDLC hakkında daha yeni düşünme yolları (bkz. Çevik metodolojiler ) bu geleneksel yaklaşımı bir şekilde yeniden düzenler. Tasarım (daha az ölçüde mimari) SDLC boyunca bilerek yapılır . Tüm sürecin tekrar tekrar gerçekleştiği genellikle daha fazla yineleme vardır .
  4. Yazılım geliştirme karmaşık ve yine de planlanması zordur, ancak müşteriler / yöneticiler / satış görevlileri genellikle orta akıştaki hedefleri ve gereksinimleri değiştirerek bunu zorlaştırır. Tasarım ve hatta mimari kararlar , plan olsun ya da olmasın projede daha sonra yapılmalıdır .

Aşamalar veya sorumluluk alanları birlikte karışsa ve her yerde gerçekleşse bile, hangi düzeyde karar alma sürecinin olduğunu bilmek her zaman iyidir. (Bunu sonsuza dek devam ettirebiliriz. Bir özet tutmaya çalışıyorum.) Şununla bitireceğim: Projenizde resmi bir mimari veya tasarım aşaması / AOR / belgesel yok gibi görünse de, herhangi birinin bilinçli olarak yapıyor ya da yapmıyor. Hiç kimse mimarlık yapmaya karar vermezse, muhtemelen zayıf olan varsayılan bir mimari oluşur. Tasarım için aynen. Bunları temsil eden resmi aşamalar yoksa, bu kavramlar neredeyse daha önemlidir .


İyi cevap. Birinin diğerinin bir parçası gibi görünmesine vurgu yapmayı seviyorum . Dördüncü nokta ilginç bir soruyu gündeme getiriyor: Belli bir problem alanındaki tasarım, henüz içinde bir mimariye sahip olmadığında daha az geçerli mi? Deneyim evet önerebilir, ancak teorik olarak uygun kapsamda (yani belirli bir bileşen için) bir tasarımın, sonunda nasıl kullanıldığına bakılmaksızın eşit derecede geçerli olması gerektiğini düşünmek isterim.
Tom W

55

Mimari stratejik, Tasarım ise taktikseldir.

Mimarlık, çerçeveler, araçlar, programlama paradigmaları, bileşen tabanlı yazılım mühendisliği standartları, üst düzey ilkelerden oluşur.

Tasarım, tasarım modelleri, programlama deyimleri ve yeniden düzenleme gibi yerel kısıtlamalarla ilgili bir faaliyettir.


Buna oy vermek için "tasarım" tanımındaki "tasarım" ve "mimarlık" kelimelerine daha az referans istiyorum ...
Peter Hansen

1
Anlaşıldı .. belki de: Mimari, çerçeveler, araçlar, programlama paradigmaları, bileşen tabanlı yazılım mühendisliği standartları, üst düzey prensiplerden oluşur.
Chris Kannon

38

Bunu mimarlık ve tasarım arasında basit bir ayrım aradığım için buldum;
Onlara bu şekilde bakmak hakkında ne düşünüyorsun:

  • mimarlık yaptığımız "ne" dir;
  • tasarım "nasıl" inşa ediyoruz;

4
Yaptığımız şey müşterinin gereksinimleri. Nasıl inşa ettiğimiz hem mimariye hem de tasarıma bağlıdır. Yani hayır, bu tamamen yanlış.
Marek

1
@Marek Bunda neyin yanlış olduğunu göremiyorum. Vb bileşenler, algoritmalar gerçek uygulamalar: Mimarlık sürüme, müşteri ne istediğini, ne genel olarak, bu ve benzeri Tasarım bunlar daha sonra aslında nasıl yapılır ise yapılmış Hangi bileşenlerin gibi görünmelidir ne
RecursiveExceptionException

21
  1. Mimari, bir bilgisayarın veya bilgisayar tabanlı sistemin kavramsal yapısı ve mantıksal organizasyonu anlamına gelir.

    Tasarım, bir sistemin veya bir nesnenin yapılmadan önce görünümünü ve işlevini veya işleyişini göstermek için üretilen bir plan veya çizim anlamına gelir.

  2. Bir bileşeni “mimarlarken”, daha büyük sistemde nasıl davranacağını tanımlarsınız.

    Aynı bileşeni "tasarlıyorsanız", bileşenin dahili olarak nasıl davrandığını tanımlarsınız.

Tüm mimari tasarımdır, ancak tüm tasarım mimari değildir.

Whatbölüm Tasarım, Howsomut uygulama ve kesişim Whatve HowMimarlık.

Farklılaştırma Mimarlık ve Tasarım için resim :

Tasarım ve Mimari

Ayrıca, mimari açıdan önemli olmayan, yani tasarımın mimari dalına ait olmayan tasarım kararları da vardır. Örneğin, algoritmanın seçimi, veri yapısının seçimi gibi bazı bileşenlerin iç tasarım kararları.

Bileşen sınırı dışında görünmeyen herhangi bir tasarım kararı, bir bileşenin iç tasarımıdır ve mimari değildir. Bunlar, tasarımları sistem seviyesi mimarinin getirdiği mimari kısıtlamaları kırmadığı sürece, bir sistem mimarının modül tasarımcısının takdirine veya uygulama ekibine bırakacağı tasarım kararlarıdır.

İyi benzetme sağlayan bağlantı


Bu cevabı sevmiyorum. Mimari, soyutlamanın en üst seviyesidir, bu nedenle "nasıl" yapıldığını rahatsız etmemelisiniz. Tasarım ve mimarinin bir şekilde bağlantılı olduğunu kabul ediyorum - Tasarım, bir sistem mimarisinin bir parçasını oluşturan bir faaliyettir, ancak "Ne ve Nasıl" Mimarisi olduğunu söyleyemem çünkü çok kafa karıştırıcı ...
Martin Čuka

15

Haklı olduğunu söyleyebilirim, kendi sözlerimle;

Mimari , sistem gereksinimlerinin sistem öğelerine tahsis edilmesidir. Bir mimariyle ilgili dört ifade:

  1. Dil veya kalıplar gibi işlevsel olmayan gereksinimler getirebilir.
  2. Bileşenler, arayüzler, zamanlama vb. Arasındaki etkileşimi tanımlar.
  3. Yeni işlevler getirmez,
  4. Sistemin gerçekleştirmeyi amaçladığı (tasarlanmış) fonksiyonları elemanlara tahsis eder.

Mimari, sistemin karmaşıklığı alt gruplara ayrıldığında önemli bir mühendislik aşamasıdır .

Örnek: Evinizi düşünün, mutfağınız için bir mimara ihtiyacınız yok (sadece bir unsur dahil), ancak tüm binanın kapılar ve çatı gibi bazı etkileşim tanımlarına ihtiyacı var .

Tasarım , işlevin (önerilen) uygulamasının bilgilendirici bir temsilidir. Geri bildirim almak ve paydaşlarla tartışmak amaçlanmıştır. İyi bir uygulama olabilir , ancak temel bir mühendislik adımı değildir .

Mutfak kurulmadan önce mutfak tasarımını görmek güzel olurdu, ancak pişirme gereksinimi için gerekli değildir :

Bunu düşünürsem şunu söyleyebilirsin:

  • mimari, daha ayrıntılı bir soyutlama düzeyinde bir kamu / mühendis içindir
  • tasarım, daha az ayrıntılı bir soyutlama düzeyinde halka yöneliktir

Mimari için +1, sistem gereksinimlerinin sistem öğelerine tahsis edilmesidir. Son listede 'a' kelimesinin kullanımı için Sanal -1. Bunu benim (doğru) ilk tanımınız, soyutlamanın antitezidir.
Chris Walton

Nokta 1 ve 3 hakkında emin değilim. Hiçbir şey paydaş gereksinimlerini karşılamak için gerekenden daha fazla işlevsellik sunmamalıdır. Kısıtlamalar daha çok bir metodoloji konusudur. Diğer noktalar yardımcı olur. Mutfak benzetmesi harika bir şey değil; bir mimara ihtiyacınız yoktur, ancak mutfak tasarımı, bir şeyin biraz modüler bileşenler kullanılarak tasarlandığı oldukça uzmanlaşmış bir alandır. Tasarımın önemli bir mühendislik adımı olmaması konusunda anlaşamıyorum. Son iki noktanın ne anlama geldiğinden emin değilim.
Mike G

Uygulama nereye uyuyor? Uygulama Tasarım değil mi?
jwilleke

14

Hatırlatıcım:

  • Tasarımı birine sormadan değiştirebiliriz
  • Mimariyi değiştirirsek onu birisine (ekip, müşteri, paydaş, ...) iletmemiz gerekir.

6

Sanırım Tasarım ve Mimari hakkında ne zaman konuştuğumuzu belirlemek için aşağıdaki kuralı kullanmalıyız: Oluşturduğunuz bir yazılım resminin unsurları bire bir programlama dili sözdizimsel yapı ile eşleştirilebiliyorsa, Mimari değilse Tasarım'dır.

Bu nedenle, örneğin, bir sınıf diyagramı veya bir sıra diyagramı görüyorsanız, Sınıf sözdizimsel yapısını kullanarak bir sınıfı ve bunların ilişkilerini Nesne Tabanlı Programlama diliyle eşleyebilirsiniz. Bu açıkça Tasarım. Ayrıca, bu tartışmanın bir yazılım sistemini uygulamak için kullanacağınız programlama dili ile bir ilişkisi olduğu tabloya getirebilir. Java kullanıyorsanız, Java Nesne Odaklı Programlama Dili olduğu için önceki örnek geçerlidir. Paketleri ve bağımlılıklarını gösteren bir şema bulursanız, Tasarım da budur. Öğeyi (bu durumda bir paket) Java sözdizimsel yapısıyla eşleyebilirsiniz.

Şimdi, Java uygulamanızın modüllere bölündüğünü ve her bir modülün (bir kavanoz dosyası dağıtım birimi olarak temsil edilir) bir paket kümesi olduğunu ve modül ve bağımlılıklarını içeren bir diyagramla sunulduğunu varsayalım, yani Mimari. Java'da bir modülü (bir paket kümesi) sözdizimsel bir yapıya eşlemenin bir yolu yoktur (en azından Java 7'ye kadar değil). Bu şemanın, yazılım modelinizin soyutlama düzeyinde bir adım daha yüksek olduğunu da fark edebilirsiniz. Bir paket şemasının üzerindeki herhangi bir şema (daha büyük taneli), Java programlama dilinde gelişirken bir Mimari görünümü temsil eder. Öte yandan, Modula-2'de gelişiyorsanız, bir modül diyagramı bir Tasarımı temsil eder.

( Http://www.copypasteisforword.com/notes/software-architecture-vs-software-design adresinden bir parça )


Çok beğendim. İyi katkı. Oldukça net olup olmadığından emin değilim, ancak böyle bir soruda alacağınız kadar kesin. Sana oy verirdim ama şu gün için oy vermedim :(.
Mike G

5

Şahsen, bunu beğendim:

"Tasarımcı, bir kullanıcı bir düğmeye bastığında olanlarla ilgileniyor ve mimar on bin kullanıcı bir düğmeye bastığında olanlarla ilgileniyor."

Mark Cade ve Humphrey Sheil tarafından hazırlanan Java ™ EE Eğitim Kılavuzu için SCEA


Bu kitabı iki defadan fazla okuduğumda bile, yukarıdaki tüm yorumları okuduktan sonra bu tanım benim için anlamlı değil. Bu nedenle: tasarımcı kısmı kulağa hoş geliyor çünkü düğmenin olması gerektiği şeyi yaptığını emin olmak için her ayrıntıya dikkat edeceksiniz. Ama mimar kısmı, modüllerin etkileşimi ya da büyük resimden başka bir şey değil, performans ve bunun gibi şeyler hakkında, sence bu tanımdan bir şey yanlış anladım mı?
Rene Enriquez

5

Birçok açıklamaya katılıyorum; esasen mimari tasarım ile yazılım sistemlerinin ayrıntılı tasarımı arasındaki ayrımı biliyoruz.

Tasarımcının amacı, şartnamelerde geliştirme için gerekli olduğu kadar kesin ve somut olmaktır; mimar, temel olarak, ayrıntılı tasarımın başlaması için gereken ölçüde sistemin yapısını ve küresel davranışını belirtmeyi amaçlamaktadır.

İyi bir mimar hiper spesifikasyonları önleyecektir - mimari aşırı tanımlanmamalı, ancak yeterli olmalıdır (mimari) kararlar, yalnızca ele alınması için en pahalı riskleri sunan ve etkili bir şekilde bir çerçeve ("ortaklık") sağlayan yönler için oluşturmalıdır. detaylı tasarım üzerinde çalışılabilir, yani yerel işlevsellik için değişkenlik.

Gerçekten de, mimari süreç veya yaşam döngüsü sadece bu temayı takip eder - (mimari olarak) önemli iş gereksinimleri için yapıyı özetlemek ve daha somut çıktılar için tasarım aşamasına daha fazla ayrıntı bırakmak için yeterli düzeyde soyutlama.


5

Mimari tasarımdır, ancak tüm tasarım mimari değildir. Bu nedenle, açık konuşmak gerekirse, mimari tasarım ile mimari olmayan tasarım arasında ayrım yapmaya çalışmak daha anlamlı olacaktır . Ve fark nedir? Değişir! Her yazılım mimarının farklı bir yanıtı olabilir (ymmv!). Buluşsal yöntemlerimizi 'sınıf diyagramları mimarlık ve sıra diyagramları tasarım' gibi bir cevap bulmak için geliştiriyoruz. DSA kitabına bakın fazla .

Mimarinin tasarımdan daha yüksek bir soyutlama düzeyinde olduğunu veya mimarinin mantıklı olduğunu ve tasarımın fiziksel olduğunu söylemek yaygındır. Ancak bu fikir, yaygın olarak kabul edilse de, pratikte işe yaramaz. Yüksek veya düşük soyutlama, mantıksal ve fiziksel arasındaki çizgiyi nerede çiziyorsunuz? Değişir!

Benim önerim:

  • tek bir tasarım belgesi yarat.
  • bu tasarım belgesini istediğiniz şekilde veya daha iyi, okuyucuların daha alıştığı şekilde adlandırın. Örnekler: "Yazılım Mimarisi", "Yazılım Tasarım Spesifikasyonu".
  • bu belgeyi görünümlere ayırın ve başka bir görünümün ayrıntılandırılması olarak bir görünüm oluşturabileceğinizi unutmayın.
  • çapraz referanslar veya köprüler ekleyerek belgedeki görünümleri gezinilebilir hale getirme
  • tasarımın geniş ancak sığ bir görünümünü gösteren daha yüksek düzey görünümlere ve dar ancak daha derin tasarım ayrıntılarını gösteren uygulamaya daha yakın görünümlere sahip olacaksınız.
  • çoklu görünüm mimarisi belgesine ( burada ) bir göz atmak isteyebilirsiniz .

Tüm bunları söyledikten sonra , sormamız gereken daha alakalı bir soru şudur: ne kadar tasarım yeterlidir? Yani, tasarımı tanımlamayı ne zaman bırakmalıyım (diyagramlarda veya nesirlerde) ve kodlamaya geçmeliyim?


1
İlk tanıma katılıyorum, ancak kaynağını eklemek iyi olurdu: "Paul Clements, Yazılım mimarilerini belgelemek: görüşler ve ötesi". Son sorunuz için: Tasarım yapmayı asla bırakmazsınız. Clements'in referansta bulunulan kitapta göstermeye çalıştığı şey budur. Sistem üzerinde çalışan her geliştirici tasarlayacak bazı bunun bir parçası ama bu tasarımların çoğu mimarisi için ilgili olmayacaktır. Bu nedenle, yazılım mimarisi hakkında konuşmak veya belgelemek istiyorsanız, artık alakalı olmayan bölümleri tartışır tartışmaz durursunuz.
Thomas Eizinger

1
@ThomasEizinger. Kitabımıza bir link ekledim. İyi öneri. Ve yorumunuz doğru kredi vermeye de yardımcı olur. Son soruya gelince, tasarım dokümantasyon çabalarına değinmek istedim. Paragrafı düzenledim. Teşekkürler!
Paulo Merson

3

Evet, kulağa doğru geliyor. Tasarım yapacağınız şeydir ve mimari, tasarımın parçalarının ve parçalarının bir araya getirileceği yoldur. Bu dil agnostik olabilir, ancak normal olarak kullanılacak teknolojileri belirtirdi, yani LAMP v Windows, Web Service v RPC.


3

Bir programın veya bilgi işlem sisteminin yazılım mimarisi, yazılım bileşenlerini, bu bileşenlerin harici olarak görülebilir özelliklerini ve aralarındaki ilişkileri içeren sistemin yapısı veya yapılarıdır.

(Wikipedia'dan, http://en.wikipedia.org/wiki/Software_architecture )

Yazılım tasarımı, bir yazılım çözümü için problem çözme ve planlama sürecidir. Yazılımın amacı ve özellikleri belirlendikten sonra, yazılım geliştiricileri bir çözüm planı geliştirmek için tasarımcıları tasarlayacak veya istihdam edecektir. Mimari görünümün yanı sıra düşük seviyeli bileşen ve algoritma uygulama konularını içerir.

(Wikipedia'dan, http://en.wikipedia.org/wiki/Software_design )

Kendim daha iyi söyleyemezdim :)


3

Mimarlığı Patrick Karcher'ın yaptığı gibi görüyorum - büyük resim. Örneğin, bir binaya mimariyi sağlayabilir, yapısal desteğini, pencereleri, girişleri ve çıkışları, su drenajını vb. Görüntüleyebilirsiniz. Ancak zemin düzenini, kabin pozisyonlarını vb.

Yani binayı tasarlarken her ofisin düzenini tasarlamamışsınızdır. Aynı şey yazılım için de geçerli.

Düzeni tasarlamayı "Düzeni tasarlamak" olarak görebilirsiniz ...


3

Güzel soru ... Aralarındaki çizgi neredeyse parlak bir çizgi olmasa da, imho, eğer her iki terimi de kullanıyorsanız, o zaman Mimarlık bir şeyin nasıl inşa edileceği veya inşa edileceğine dair daha teknik veya yapısal kararları, özellikle de zor olacak kararları ( Tasarım daha sonra kolayca değiştirilebilen kararları kapsar (yöntem adları, sınıf <-> dosya organizasyon yapısı, tasarım modelleri, belirli bir sorunu çözmek için tekli veya statik bir sınıf kullanılıp kullanılmayacağı gibi) vb.) ve / veya bir sistemin veya uygulamanın (İnsan Arayüzü, kullanım kolaylığı, görünüm ve his vb.) görünümünü veya estetik yönlerini etkileyenler.


3

Yazılım mimarisi , “hesaplamaların algoritmalarının ve veri yapılarının ötesinde” sorunlarla ilgilenir.

Mimari özellikle ilgili değildir… uygulamaların ayrıntıları (örn. Algoritmalar ve veri yapıları.) Mimari tasarım, genellikle OOD tarafından sağlanandan daha zengin bir soyutlama koleksiyonu içerir ”(nesne yönelimli tasarım).

tasarlamak , tasarım öğelerinin modülerleştirilmesi ve ayrıntılı arabirimleri, algoritmaları ve prosedürleri ve mimariyi desteklemek ve gereksinimleri karşılamak için gereken veri türleri ile ilgilidir.

“Mimari” genellikle “tasarım” ile eşanlamlı olarak kullanılır (bazen “üst düzey” sıfatından önce gelir). Birçok kişi “mimari desenler” terimini “tasarım desenleri” ile eşanlamlı olarak kullanmaktadır.

Bu bağlantıya göz atın.

Mimari, Tasarım ve Uygulama Terimlerini Tanımlama


3

Mimari:
Teknik açıdan önemli gereksinimleri sisteme taşıyan daha yüksek soyutlama seviyelerinde yapısal tasarım çalışmaları. Mimari, daha fazla tasarım için temel oluşturuyor.

Tasarım:
Her soyutlama katmanında yinelemeli bir süreçle mimarinin yapmadığı şeyleri doldurma sanatı.



3

... uzun zaman önce uzak bir yerde filozoflar bir ve birçok arasındaki ayrım konusunda endişeli. Mimarlık, birçoğunu gerektiren ilişki ile ilgilidir. Mimarinin bileşenleri vardır. Tasarım, içeriği gerektiren içerikle ilgilidir. Tasarımın özellikleri, nitelikleri, özellikleri vardır. Tipik olarak tasarımın mimaride olduğunu düşünüyoruz. Dualist düşünce, çoğunu ilkel olarak verir. Ancak mimari de tasarımın içindedir. Önümüzde olanı - tek ya da çok - görüntülemeyi seçtik.


Bu cevabı sadece "Ama mimari de tasarımın içinde." "Mimari tasarım içinde olabilir" diyebilirim. - Sana kalmış. Ayrılmazlar.
Miroslav Trninic

3

Oldukça öznel ama benim almak:

Mimari Diğer sistemlerle etkileşimler, donanım gereksinimi, genel bileşen tasarımı ve veri akışı dahil sistemin genel tasarımı.

Tasarım Bir bileşenin genel sistemdeki organizasyonu ve akışı. Bu, diğer bileşenlerle etkileşim için bileşenin API'sını da içerir.


2

Yazılım mimarisi en iyi, iş ve projelerin daha yüksek mimari seviyelerle tanımlandığı uygulamaları projelere yansıtmanız gerektiğinde sistem düzeyinde kullanılır.

Örneğin, işletmeniz tüccarlar için "Kâr ve Zarar" ile ilgilidir ve ana işlevleriniz "portföy değerlendirmesi" ve "risk hesaplama" yı içerir.

Ancak bir Yazılım Mimarı çözümünü detaylandıracağı zaman, şunu fark edecektir:

"portföy değerlendirmesi" sadece bir uygulama olamaz. Aşağıdaki gibi yönetilebilir projelerde rafine edilmesi gerekir:

  • GUI
  • Başlatıcı
  • hareket memuru
  • ...

(içerdiği işlemler o kadar büyük olduğundan, ortak bir GUI aracılığıyla her zaman izlenirken birkaç bilgisayar arasında bölünmeleri gerekir)

Yazılım tasarımı farklı uygulamaları, teknik ilişkilerini ve dahili alt bileşenlerini inceler.
Son Mimari katmanın ("Teknik Mimari") üzerinde çalışması için (teknik çerçeve veya enine bileşenler açısından) ve proje ekiplerinin ( işletme fonksiyonlarının uygulanmasına daha fazla odaklanılması ) başlaması için gereken spesifikasyonları üretecektir. ilgili projeleri.


2

eğer birisi bir gemi inşa ederse, motor, gövde, elektrik devreleri vs. onun "mimari unsurları" olacaktır. Onun için motor yapımı "tasarım işi" olacak.

Daha sonra motorun yapımını başka bir ekibe devrederse, bir "motor mimarisi" yaratacaklar ...

Yani - soyutlama veya detay seviyesine bağlıdır. Bir kişinin mimarisi, annelerin tasarımı olabilir!


2

Mimarlık, "değiştirilmesi zor tasarım kararlarıdır".

Pratik olarak tasarımınızın her zaman değiştiği anlamına gelen TDD ile çalıştıktan sonra, kendimi sıklıkla bu soru ile mücadele ederken buldum. Yukarıdaki tanım , Kurumsal Uygulama Mimarisi Kalıpları'ndan alınmıştır, Martin Fowler

Bu, mimarinin sisteminizin Diline, Çerçevesine ve Etki Alanına bağlı olduğu anlamına gelir. Java Class'ınızdan 5 dakika içinde bir arabirimi ayıklayabiliyorsanız, artık bir mimari karar vermez.


1

Cliff Notes sürümü:

Tasarım: İstenen ürünün özelliklerine göre bir çözüm uygulamak.

Mimari: Tasarımınızı destekleyen temel / araçlar / altyapı / bileşenler.

Bu, birçok yanıtı çağıracak oldukça geniş bir sorudur.


1

Mimari, bir sistem oluşturmak için ortaya çıkan tasarım desenlerinin koleksiyonudur.

Sanırım Tasarım tüm bunları bir araya getirmek için kullanılan yaratıcılık mı?


Katılmam gerekiyor. Görünüşe göre (kendim ve diğer birçok cevap olarak) mimariyi "büyük bir resme" koyarken, tasarım daha çok yöntem ve problem çözme ile ilgilidir. Ancak, eğer mimariniz tasarım desenlerinden "sonuç" çıkarsa, onlar gerçekten mimarisini yapmadınız, sadece büyümesine izin verdiniz!
Javier

... büyümesine izin vermedikçe, yani :-) Zarif bir mimari yaratmak için mevcut teknikleri kullanmak için yaratıcılığa sahip olmak biraz bilgi ve deneyim gerektirir. ... kesin bir şey bulmak elbette çok öznel ... ama evet, genel sistem tasarımları (mimariler) olmadan bazı kötü sistemler olduğunu düşünüyor olursunuz
Mark Redman

1

Yazılım mimarisi terimi neredeyse 20 yaşındayken, yazılım tasarımı daha uzun bir geçmişe sahiptir. Bu nedenle, şu anda büyüyen ağrılardan geçiyor.

Akademisyenler Mimarlık'ı daha geniş yazılım tasarımı alanının bir parçası olarak görme eğilimindedir. Her ne kadar Arch'ın kendi içinde bir alan olduğuna dair artan bir kabul var.

Uygulayıcılar Arch'ı stratejik olan ve geri alınacak bir projede maliyetli olabilecek üst düzey tasarım kararları olarak görme eğilimindedir.

Arch ve tasarım arasındaki kesin çizgi, yazılım etki alanına bağlıdır. Örneğin, Web Uygulamaları alanında, katmanlı mimari şu anda en popüler hale gelmektedir (Biz Mantık Katmanı, Veri Erişim Katmanı, vb.) Bu Arch'ın daha alt düzey bölümleri tasarım (sınıf diyagramları, yöntem imzaları vb.) ) Bu, gömülü sistemlerin, işletim sistemlerinin, derleyicilerin vb. Alanlarında farklı tanımlanır.


1

Mimari yüksek, soyut ve mantıklı bir tasarım, yazılım tasarımı ise düşük, ayrıntılı ve fiziksel bir tasarımdır.



1

Roy Thomas Fielding'in makalesinde yazılım mimarisinin ne olduğuyla ilgili tanımını ve açıklamasını seviyorum: Mimari Stiller ve Ağ Tabanlı Yazılım Mimarilerinin Tasarımı

Yazılım mimarisi, işletiminin bir aşaması sırasında bir yazılım sisteminin çalışma zamanı öğelerinin bir soyutlamasıdır. Bir sistem, her biri kendi yazılım mimarisine sahip birçok soyutlama seviyesinden ve birçok çalışma aşamasından oluşabilir.

"Çalışma zamanı öğelerini" ve "soyutlama düzeylerini" vurgulamaktadır.


uygulamanın bileşenleri veya modüllerine atıfta bulunulan çalışma zamanı öğeleri ve her modül veya bileşen kendi soyutlama düzeyini içerir. Doğru?
Ankit Rana

1

Buna kesin bir cevap yoktur, çünkü "yazılım mimarisi" ve "yazılım tasarımı" nın oldukça fazla tanımı vardır ve ikisi için de kanonik bir tanım yoktur.

Bunu düşünmenin iyi bir yolu Len Bass, Paul Clements ve Rick Kazman'ın "tüm mimari tasarımdır, ancak tüm tasarım mimari değildir" ifadesidir [Uygulamada Yazılım Mimarisi]. Buna tamamen katıldığımdan emin değilim (çünkü mimari başka aktiviteler de içerebilir) ancak mimarinin tasarımın kritik alt kümesiyle ilgilenen bir tasarım faaliyeti olduğu gerçeğini yakalar.

Biraz saygısız tanımım ( SEI tanımları sayfasında bulundu ), yanlış yapılırsa projenizin iptal edilmesine neden olan kararlar kümesidir.

Mimari, tasarım ve uygulamayı kavram olarak ayırmaya yönelik faydalı bir girişim, Amnon Eden ve Rick Kazman tarafından birkaç yıl önce burada bulunabilen "Mimarlık, Tasarım, Uygulama" başlıklı bir araştırma makalesinde yapıldı: http: //www.sei.cmu .edu / kütüphane / varlıklar / ICSE03-1.pdf . Onların dili oldukça soyut ama simplistically onlar söylüyorlar mimarisi birçok bağlamlarda kullanılabilir ve sistem boyunca uygulanmak üzere içindir tasarımdır, tasarım birçok bağlamlarda kullanılabilir ancak belirli bir kısmında uygulanan (err) tasarımdır sistemin ve uygulama bağlamında tasarım özeldir ve bu bağlamda uygulanır.

Mimari bir karar, sistemi RPC yerine mesajlaşma yoluyla entegre etme kararı olabilir (bu nedenle birçok yerde uygulanabilen ve tüm sisteme uygulanması amaçlanan genel bir prensiptir), bir tasarım kararı bir master kullanmak olabilir / giriş girdisi işleme modülündeki / slave iş parçacığı yapısı (herhangi bir yerde kullanılabilen ancak bu durumda yalnızca bir modülde kullanılan genel bir ilke) ve son olarak, bir uygulama kararı güvenlik için sorumlulukları İstek Yönlendiricisinden taşımak olabilir İstek Yöneticisi modülündeki İstek İşleyicisine (yalnızca bu bağlamla ilgili, bu bağlamda kullanılan bir karar) başvurun.

Umarım bu yardımcı olur!

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.