Wie kann festgestellt werden, ob das Entwurfsmuster korrekt implementiert ist?

13

Ich bin erfolgreich in der Lage, alle meine alten Anwendungen zu skalieren, bei denen keine dokumentierten Entwurfsmuster verwendet wurden. Welches Muster es auch sein mag, ich weiß es nicht. Ich hatte größtenteils nur das Bedürfnis, einfache OOP-Konzepte zu verwenden.

Das Design Patterns-Konzept ist komplex und schwer zu verstehen. Wie kann bei der Implementierung festgestellt werden, ob die Implementierung korrekt ist und die Anwendung über eine echte lose Kopplung verfügt?

RPK
quelle
49
Es gibt ein ernstes Missverständnis darüber, was Designmuster sind. Es ist kein magischer Feenstaub, den Sie über Ihre Anwendung streuen, um sie zu verbessern. Sie sind in erster Linie ein gemeinsames Vokabular, um über häufig verwendete Wege zur Lösung von Problemen sprechen zu können. Ich bin mir ziemlich sicher, dass es viele Leute gibt, die den ganzen Tag "Muster richtig implementieren", ohne jemals von dem Wort "Muster" gehört zu haben.
Joachim Sauer
2
@JoachimSauer Was du gerade gesagt hast, ist die Art von Sachen, die technische Universitäten unterrichten sollten ... Da ich zurzeit Student bin, ist dies die Sache, die mich derzeit am meisten stört.
Radu Murzea
1
@JoachimSauer Tatsächlich entsteht dieses Missverständnis, weil es verschiedene Implementierungstechniken für dasselbe Muster gibt. Nehmen wir zum Beispiel MVC und MVP, es gibt so viele Variationen wie die Projekte, die das gleiche Muster haben.
RPK
@RPK +1, die Tatsache, dass es Dutzende von MVX-Mustern gibt (MVC, MVP, MVA, MVVM usw.), sollte ein klares Indiz dafür sein, dass es viele gleichermaßen praktikable Möglichkeiten gibt, Dinge zu tun.
MattDavey

Antworten:

3

Um die Antwort kurz zu halten, würde ich sagen, wenn die folgenden Merkmale in Ihrem Code sichtbar sind, können Sie sicher sein, dass die Muster vorhanden sind, auch wenn Sie keine absichtlichen Anstrengungen unternommen haben (was kein Problem ist).

Gewünschte Eigenschaften:

  1. Ihre Codebasis kann auf Geräteebene getestet werden
  2. Wann immer Sie Änderungsanforderungen implementieren, nehmen Sie Änderungen nur an relevanten Klassen vor, die sich auf die Domäne beziehen.
  3. Ihre Codebasis weist keine Software-Entropie auf .

Wenn Sie immer noch neugierig sind, Ihren Code zu identifizieren und mit den echten Musternamen zu versehen, würde ich Folgendes empfehlen, um den Ball ins Rollen zu bringen.

  1. Entwickeln Sie Ihre Codebasis erneut, um einige UML-Daigramme zu generieren.
  2. Vergleichen Sie die Diagramme visuell mit jedem verfügbaren Referenzmaterial für Muster.

Dies sollte Ihnen eine faire Vorstellung geben.

Sameer Patil
quelle
Könnten Sie mehr über die dritte ausarbeiten?
Niing
19

Sie erwähnen sowohl Entwurfsmuster als auch Kopplung. Dies sind separate Konzepte, daher werde ich sie separat behandeln. Die einzige wirkliche Verbindung besteht darin, dass Entwurfsmuster dazu neigen, eine lose Kopplung zu fördern (da dies ein Hauptaspekt eines guten Entwurfs ist).

Designmuster

Das Konzept der Entwurfsmuster ist eigentlich recht einfach: Sie sind nur eine Reihe von Vorlagen, mit denen Sie verschiedene häufig auftretende Probleme lösen können. Es gibt 2 Hauptgründe, warum sie beliebt sind:

  1. Sie sind „bewährt“: Sie wurden bereits mehrfach verwendet, und die Vor- und Nachteile sind allgemein bekannt. Insbesondere sind subtile Probleme bekannt, die zu großen Problemen führen können.
  2. Sie bieten eine gemeinsame Terminologie und ermöglichen so eine einfachere Kommunikation. Wenn jemand sagt "Klasse X spielt die Rolle des Beobachters im Beobachtermuster", können Entwickler, die mit dem Muster vertraut sind, sofort verstehen, was los ist.

Woher weißt du, dass du es richtig implementiert hast? Das ist eine schwierige Frage. Bei den meisten Mustern ist es einfach - Sie haben es entweder kaputt gemacht oder Sie haben es nicht. Einige Muster sind weniger klar definiert als andere - zB Model-View-Controller . Solche Muster werden besser als allgemeine Richtlinien verwendet. Die Besonderheiten der Implementierung sind weniger wichtig als das Verständnis der Gründe für das Vorhandensein des Musters und dessen Zweck.

Designmuster sind nicht der einzig wahre Weg. Oft müssen Sie sie entweder für Ihre speziellen Zwecke anpassen oder es gibt einfach keine Muster, die den Anforderungen entsprechen. Ein Entwurfsmuster zu erzwingen, wo es nicht passt, ist eine schlechte Idee. Es ist, als würde man einen wirklich guten Hammer benutzen, wenn man eigentlich einen Schraubenzieher möchte.

Kupplung

Dies ist eine wirklich wichtige Idee in der Informatik. Da sich die Anforderungen für die meisten Softwareprojekte im Laufe der Zeit (manchmal erheblich) ändern, ist es wichtig, dass ein Design mit Änderungen umgehen kann. Die Kopplung ist im Grunde das Maß dafür, "wie schwer es wäre, diese Komponente gegen eine andere auszutauschen". Die 'Komponente' kann eine Methode, eine Klasse, ein Paket, eine Bibliothek usw. sein.

In diesem Wikipedia-Artikel sind verschiedene Kopplungsarten aufgeführt .

vaughandroid
quelle
2

Die Antwort ist eigentlich der Zweck, zu dem Sie von Anfang an Entwurfsmuster schreiben möchten. Warum möchten Sie Flexibilität für?

Das ist Veränderung. Anforderungen ändern sich. Versuchen Sie, etwas an Ihren Anforderungen zu ändern, das sich in Codeänderungen widerspiegelt, und sehen Sie, wie einfach / schwierig dies ist.

m3th0dman
quelle
-1

Die Verwendung von Entwurfsmustern ist eine vorbeugende Maßnahme. Sie verwenden Designmuster, um Ihre Arbeit zu vereinfachen, wenn Sie die Anwendung später skalieren. Natürlich müssen Sie jetzt ein bisschen mehr arbeiten, um Ihre Arbeit später zu erleichtern. Die eigentliche Frage ist also, wie viel Veränderung Sie in Zukunft erwarten können und was diese Veränderung ist. Wenn Sie keine Skalierbarkeit und Flexibilität benötigen, können Sie auf Entwurfsmuster verzichten.

Entwurfsmuster sind selbst eine Implementierung objektorientierter Entwurfsprinzipien. Solange Sie diese Grundsätze einhalten, sind Ihre Anwendungen flexibel und skalierbar. selbst wenn Sie nicht wirklich ein tatsächliches Designmuster haben. Wie Joachim Sauer oben ausgeführt hat, sind sie gemeinsame Lösungen für gemeinsame Probleme.

DPD
quelle
2
IMO: Die Verwendung von Entwurfsmustern hat nichts mit Skalierbarkeit zu tun. Es ist einfach ein Vokabular, gemeinsame Muster im Code zu erkennen, damit wir darüber sprechen können. Skalierungsanwendungen können oft bedeuten, dass gute Designs zugunsten der Leistung abgelehnt werden.
Adrian Schneider