Was ist der Unterschied zwischen Designmustern und Architekturmustern?


118

Wenn wir im Internet über Designmuster lesen, stellen wir fest, dass es drei Kategorien gibt:

  • Kreativ
  • Strukturell
  • Verhalten

Wenn wir jedoch die Architektur einer Software erstellen, denken wir an MVP, MVC oder MVVM.

Unter den Kreationsmustern habe ich beispielsweise das Singleton-Muster gefunden , aber ich habe auch Singleton in meinem MPV verwendet.

Meine Frage lautet also: Ist ein Designmuster eine Gesamtstruktur eines Produkts?

  • Wenn ja, wie kann Singleton dann ein Entwurfsmuster sein? Weil ich es überall in meiner Anwendung verwenden kann. Grundsätzlich ist es beschränkt, jeweils nur eine Instanz im Speicher zu erstellen. Definiert dieses Konzept jedoch nicht, wie Software entworfen wird?

  • Wenn nicht, wo befinden sich MVP, MVC und MVVM in den drei Kategorien von Mustern? Und was ist der Unterschied zwischen Design und Architektur von Software?



2
Schauen Sie sich diese Liste der Entwurfsmuster und Architekturmuster Ressourcen github.com/DovAmir/awesome-design-patterns
dov.amir

Antworten:


174

Es bedarf einer detaillierten Erklärung, aber ich werde versuchen, die Unterschiede nach bestem Wissen zu skizzieren.

Muster sind destillierte Gemeinsamkeiten, die Sie in Programmen finden. Es ermöglicht uns, eine große komplexe Struktur zu dekonstruieren und mit einfachen Teilen zu bauen. Es bietet eine allgemeine Lösung für eine Klasse von Problemen.

Eine große komplexe Software durchläuft eine Reihe von Dekonstruktionen auf verschiedenen Ebenen. Auf großer Ebene sind Architekturmuster die Werkzeuge. Auf kleinerer Ebene sind Entwurfsmuster die Werkzeuge und auf Implementierungsebene sind Programmierparadigmen die Werkzeuge.

Ein Muster kann auf sehr unterschiedlichen Ebenen auftreten. Siehe Fraktale . Schnelle Sortierung, Zusammenführungssortierung sind alle algorithmischen Muster zum Organisieren einer Gruppe von Elementen in einer Reihenfolge.

Für eine sehr vereinfachte Ansicht:

  • Programmierparadigmen - spezifisch für die Programmiersprache
  • Entwurfsmuster - löst wiederkehrende Probleme bei der Softwarekonstruktion
  • Architekturmuster - grundlegende strukturelle Organisation für Softwaresysteme

Redewendungen sind paradigmenspezifische und sprachspezifische Programmiertechniken, die Details auf niedriger Ebene ausfüllen.

Entwurfsmuster sind normalerweise mit Gemeinsamkeiten auf Codeebene verbunden. Es bietet verschiedene Schemata zum Verfeinern und Erstellen kleinerer Subsysteme. Es wird normalerweise von der Programmiersprache beeinflusst. Einige Muster sind aufgrund von Sprachparadigmen unbedeutend . Entwurfsmuster sind mittelgroße Taktiken, die einen Teil der Struktur und des Verhaltens von Entitäten und ihrer Beziehungen ausarbeiten.

Während Architekturmuster auf einer höheren Ebene als Gemeinsamkeit angesehen werden als Entwurfsmuster. Architekturmuster sind übergeordnete Strategien, die sich auf große Komponenten, die globalen Eigenschaften und Mechanismen eines Systems beziehen.

Wie werden Muster erhalten? Durch:

  1. Wiederverwendung,
  2. Einstufung
  3. und schließlich Abstraktion, um die Gemeinsamkeit zu destillieren.

Wenn Sie den oben genannten Gedanken gefolgt sind. Sie werden sehen, dass Singleton ein "Entwurfsmuster" ist, während MVC eines der "Architekturmuster" ist, um die Trennung von Bedenken zu behandeln.

Versuchen Sie weiter zu lesen:

  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
Sehr gut gemacht und ausgearbeitet. Jetzt wünschte ich mir nur, jeder würde die Begriffe so differenziert verwenden, wie Sie sie hier angegeben haben. Darf ich einen Abdruck Ihrer Antwort an die Wand über dem Kaffeespender unserer Marketingabteilung heften? Vielleicht werden sie eines Tages verstehen. ;-)
ofi

@ofi: Danke! Die Verwendung von Sprachkonstrukten kann uns sowohl irreführen als auch leiten. Das finde ich ziemlich mächtig.
Pyfunc

+3 für die Rettung vor den Interviewfragen :)
RAJESH KUMAR ARUMUGAM

Gute Antwort, danke !! Wie @ofi sagte, werde ich es drucken und in die Wand des Designteams stecken.
Rolle

11

Entwurfsmuster sind bekannte Muster zur Lösung technischer Probleme auf eine Weise, die sich vielfach bewährt hat. Entwurfsmuster sind gängige Entwurfsstrukturen und -praktiken, mit denen wiederverwendbare objektorientierte Software erstellt werden kann. Beispiele für Entwurfsmuster sind Factory Pattern, Singleton, Facade, State usw. Entwurfsmuster können verwendet werden, um kleinere Probleme in der gesamten Anwendung zu lösen. Sie lassen sich viel einfacher einfügen, ändern und hinzufügen als die Gesamtarchitektur

Architekturmuster sind bekannte Muster zur Lösung von Architekturproblemen bei Softwareanwendungen. Bei der Softwareanwendungsarchitektur wird eine strukturierte Lösung definiert, die alle technischen und betrieblichen Anforderungen erfüllt. Die Architektur der Anwendung ist die gesamte "Organisation" des Codes. Beispiele für verschiedene Architekturen können MVC, MVVM, MVP, n-Layer (dh UI-BLL-DAL) usw. sein. Die Architektur muss normalerweise im Voraus festgelegt werden und ist nach dem Erstellen der Anwendung oft schwer zu ändern.


1

Architekturelemente tendieren zu Sammlungen von Klassen oder Modulen, die im Allgemeinen als Kästchen dargestellt werden. Diagramme über Architektur stellen die höchste Ebene dar, während Klassendiagramme auf der atomarsten Ebene liegen. Der Zweck von Architekturmustern besteht darin, zu verstehen, wie die Hauptteile des Systems zusammenpassen, wie Nachrichten und Daten durch das System fließen und andere strukturelle Probleme. Architekturmuster verwenden eine Vielzahl von Komponententypen, die typischerweise aus nacheinander kleineren Modulen bestehen. Jede Komponente hat eine Verantwortung innerhalb der Architektur. Entwurfsmuster sind Entwurfsmuster auf niedriger oder Klassenebene für kleinere Partikel von Anwendungen.

Für weitere Informationen: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Nun, zum größten Teil ist es eine Frage der Sprache. Nach meiner Erfahrung ist die Grenze zwischen Design und Architektur in Bezug auf Software ein breiter Fluss, dessen Breite sich aus dem Wasserstand ergibt, der wiederum hauptsächlich von den Marketingzeiten beeinflusst wird. Im Allgemeinen wird der Begriff "Design" mit einem starken Aspekt des Verhaltens des Softwareprodukts verwendet, der von Endbenutzern erkannt wird, während "Architektur" für die technische Struktur einer Software steht, dh für die Komponenten, Bibliotheken, Protokolle und alles, was zur Erfüllung der Anforderungen erforderlich ist Design. "Entwurfsmuster" nehmen zwei Rollen ein: 1. Sie werden als Best Practices zur Lösung einer Kategorie von (mehr oder weniger) Standardproblemen angesehen, nicht als Produkte; 2. Sie helfen den Entwicklern bei der Kommunikation. Bleiben Sie bei Ihrem Beispiel eines Singleton, Es ermöglicht uns zu wissen, worum es bei der Mechanik geht, indem wir nur das Wort verwenden, anstatt jedes Mal zu erklären, dass wir eine einzelne Instanz mithilfe eines festgelegten Datenbereichs (Variable oder was auch immer) erstellt haben, der auf kontrollierte Weise festgelegt ist und garantiert ist die einzige, weil wir den Konstruktor der Klasse usw. geschützt haben. IMHO lautet die kurze Antwort auf Ihre Frage: Es kommt darauf an, wer spricht. Macht das Sinn?


0

Entwurfsmuster unterscheiden sich von Architekturmustern in ihrem Umfang, sie sind lokaler, sie haben weniger Auswirkungen auf die Codebasis, sie wirken sich auf einen bestimmten Abschnitt der Codebasis aus, zum Beispiel:

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?)

Architekturmuster haben einen großen Einfluss auf die Codebasis und wirken sich meistens entweder horizontal (dh wie der Code innerhalb einer Ebene strukturiert wird) oder vertikal (dh wie eine Anforderung von den äußeren Ebenen in die inneren Ebenen und verarbeitet wird) auf die gesamte Anwendung aus zurück). Beispiele für Architekturmuster: Model-View-Controller, Model-View-ViewModel

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.