Designmodelle für Anfänger
Wenn Sie bereits Programme für große / kleine Produkte oder Softwareanwendungen geschrieben haben, haben Sie höchstwahrscheinlich viele Designmuster verwendet … obwohl es möglich ist, dass sie nicht zu den am häufigsten verwendeten / Standard-Designmustern gehören.
Aber ja, es gibt einen offensichtlichen Unterschied zwischen der Implementierung eines Entwurfsmusters und der „Verwendung“ eines Entwurfsmusters … so oder so, die Person, die mit Entwurfsmustern arbeitet, versteht es oder wird es leicht verstehen.
Der Punkt ist, Entwurfsmuster sind für Programmierer nicht neu.
In diesem folgenden Artikel versuche ich, Designmuster in ihren Grundlagen zu erklären, und wir werden Details verschiedener Muster, Beispiele usw. in einem anderen Artikel untersuchen.
Was ist ein Designmuster?
Beginnen…
Ich denke, der beste Weg, um mit dem Verständnis von Designmustern zu beginnen, ist, nicht-technische Muster zu verstehen, denen wir bewusst / unbewusst in unserem täglichen Leben folgen.
Nehmen wir zum Beispiel viele Lebensläufe, die für eine Stellenausschreibung eingereicht wurden. Der Lebenslauf sieht nicht bei allen gleich aus … obwohl alle dazu neigen, das Gleiche zu tun, nämlich einem Leser zu sagen, worin sie befähigt sind oder wie sie für den Job geeignet sein können.
Die meisten von ihnen, die Lebensläufe für Jobs einreichen, wissen, dass sie einen Lebenslauf mit bestimmten Informationen in einem formatierten Word-Dokument einreichen müssen.
Dies… ist ein Muster, dass jeder einen Lebenslauf mit einem bestimmten Satz von darin ausgedrückten Informationen einreicht.
Wenn Sie Lust haben … nennen Sie es Templates statt Patterns. Designvorlagen.
Es gibt viele solche Dinge im wirklichen Leben, die Muster sind. Einige Leute mögen die folgenden Beispiele:
Alle Köche rund um den Globus kochen Pizza oder Pommes Frites auf die gleiche Weise. Obwohl sie es vielleicht übertreffen / anders würzen. Das ist ein Muster.
Das Design jedes Autos folgt einem grundlegenden Designmuster, vier Rädern, Lenkrad, dem zentralen Antriebssystem wie Gaspedal, Bremskupplung usw.
Alle Dinge, die wiederholt gebaut / produziert werden, müssen zwangsläufig einem Muster in ihrem Design folgen… seien es Autos, Pizza, Geldautomaten, was auch immer… sogar Zahnbürste.
Designs, die fast zum Standardverfahren für die Codierung von Logik/Mechanismus/Technik in Software geworden sind, werden daher als Software-Designmuster bezeichnet – und daher auch als solche untersucht.
Warum ist ein Designmuster wichtig?
Grundsätzlich aus zwei Gründen:
- An einem Standard festhalten
- Um die Entwicklung zu beschleunigen
Ich werde im Detail erklären.
Zunächst sehen wir, warum es interessant ist, sich an ein Standardmuster zu halten.
Nehmen wir die Liste der Lebensläufe, die wir zuvor besprochen haben.
Es kann ein oder zwei Bewerber geben, die ihre Bewerbungen per E-Mail-Text ohne ordnungsgemäße Formatierung, ohne Anhänge an ihre E-Mail usw. senden. Diese ein oder zwei Bewerber folgen nicht dem Muster … und werden wahrscheinlich NICHT landen mit der Arbeit…. warum? Weil sie von einem gut etablierten Muster abweichen, was den Personen, die Lebensläufe für den Job in die engere Wahl ziehen, möglicherweise nicht gefällt.
Gibt es niemanden, der vom Muster abweicht und „cool“ wird? Ist das nicht Innovation?
Ja, es gibt Zeiten, in denen ein ganz anders präsentierter Lebenslauf den Job bekommt, weil er sich von den anderen unterscheidet. Normalerweise habe ich von Webdesignern gehört, die erstklassige Jobs bekommen haben, weil sie einen CD-Film ihrer Arbeit zusammengestellt und präsentiert haben oder eine Animationsfigur gemacht haben, die ihre Arbeit erklärt, sie in ihren Blog gestellt haben und solche Dinge.
Aber … das ist Experimentieren (Innovation kommt von erfolgreichen Experimenten).
Meistens kann man sich in der Softwareentwicklung aufgrund des Zeitdrucks, der Erwartungen usw. keine Experimente leisten, aber ja, manchmal erlauben einige interessante Projekte ein gewisses Experimentieren.
In der Software können wir grundlegende Dinge wie eine Bankeinzahlung nicht tun … auf 101 Arten … es wird nur ein paar Möglichkeiten geben, eine Bankeinzahlung zu verarbeiten. Es ist also sinnvoll, einem etablierten und getesteten Muster zu folgen.
Außerdem haben die meisten Designmuster Variationen … einige der Variationen sind so beliebt, dass die Variationen auch ein neuer Standardtyp des Musters sein werden.
Von Softwareprojekten wird heutzutage (zumindest implizit) erwartet, dass sie einem bereits etablierten Design eines ähnlichen Produkts / einer ähnlichen Software auf dem Markt folgen.
Hier hilft das Festhalten an einem standardmäßigen Codierungsstil oder Designmuster bei der Softwareentwicklung … die Entwicklung zu beschleunigen, den Aufwand für die Sorge um eine neue ungetestete Implementierung zu beseitigen usw.
Beschleunigung der Entwicklungszeit
Das Befolgen eines Standardentwurfsmusters hat auch den Vorteil, dass durch den Baum / die Hierarchie von Softwarearchitekten, Modulleitern, Teamleitern, Entwicklern usw. leicht kommuniziert werden kann, „wie“ etwas entwickelt werden muss und nicht nur „was“ sein muss aufgetreten.
Manchmal hilft es sogar Testteams, da Tester aus Erfahrung wissen, dass Code, der einem bestimmten Designmuster folgt, wahrscheinlich in einem bestimmten Zeitraum mit einer Reihe von Testwerkzeugen auf eine bestimmte Weise getestet werden könnte, und solche bekannten Designs möglicherweise keine Fehler aufweisen oder einige „bekannte“ Fehler haben.
Nimmt die Verwendung von Design Patterns nicht eine persönliche Note?
Nein. Erstens, weil wir nicht sagen, dass Sie einem Designmuster folgen und nichts anderes passiert. Die meisten Projektimplementierungen teilen nur grundlegende Anforderungen mit anderen Projekten und weisen höchstwahrscheinlich Abweichungen auf. Das Erstellen dieser Abweichungen erfordert das Biegen und Strecken der Standardmuster, die in einer Implementierung verwendet werden.
Es ist, als würde man die Pizza auf die übliche Weise zubereiten und sie dann aromatisieren / für verschiedene Anforderungen präsentieren, entweder wie eine Pizza mit vollem Kuchen oder einen geschnittenen Kuchen oder was auch immer.
Um die Bedeutung von Entwurfsmustern zu verstehen, ist eines sehr wichtigwichtig :
Design Patterns sind keine Technologien oder Frameworks, die uns ein bestimmtes Unternehmen oder eine bestimmte Programmiersprache aufzwingt. Das heißt, es ist wie ein offenes Konzept … Sie können es frei nehmen, verwenden, an Ihre Bedürfnisse anpassen und vor allem … fühlen, wie es Ihnen gehört.
Alle Standard- oder populären Designmuster sind tatsächlich ziemlich stark erweiterbar. Sie wurden erstens nur deshalb populär, weil viele Leute sie verwenden … und viele Leute verwenden sie nur, weil sie flexibel auf ihre Anforderungen eingehen.
Oder wie würde Ihrer Meinung nach ein Standardentwurfsmuster zu einem Projekt in New Jersey für ein Unternehmen und auch in Bangalore für ein anderes Unternehmen und eine andere Art von Projekt passen?
Das bringt uns zu „ Die meisten Entwurfsmuster sind generisch “ … was bedeutet, dass sie nicht immer zum Erstellen derselben Art von Software verwendet werden. In gemeinsamen Diskussionen hören Sie vielleicht nicht Dinge wie „Banking-Software-Designmuster“ oder „Social-Networking-Software-Designmuster“ … sondern nur „Designmuster“.
Wen sollten Design Patterns stören?
- So wie ein guter Gebäudearchitekt seine Fähigkeiten im Entwerfen von Gebäuden erweitert, indem er die Architektur und das Design zahlreicher Gebäude und Formen im Laufe seines Lebens studiert, sollte ein Softwarearchitekt untersuchen und visualisieren, wie verschiedene Software- / Technologiesysteme auf der ganzen Welt entworfen werden oder architektonisch.
- Und genauso wie die Bauarbeiter eines Gebäudes sich der verschiedenen Möglichkeiten zur Umsetzung eines Gebäudeentwurfs bewusst sein sollten, entweder aus eigener Erfahrung oder durch das Verständnis des Architekten des Gebäudes.
Softwareentwickler/Programmierer sollten grundlegende Softwaredesignmuster und ihren Implementierungscode verstehen … entweder selbst oder vom Softwarearchitekten, der das Team anweist, es nach einem bestimmten Muster zu entwickeln.
Grundlegende Codemuster
In den ersten Zeilen dieses Artikels sagte ich, dass jeder Programmierer Entwurfsmuster verwendet hätte. Hier sind einige sehr einfache Codebeispiele, die einem Muster folgen.
-
Im Folgenden finden Sie ein grundlegendes Entwurfsmuster für Abfangfilter .
-
Kopiercode ausblenden
-
switch (condition){ case Value1: case Value2: default: }
-
Ereignisauslöser, Ereignishandler usw. fallen unter das grundlegende Subjekt-Beobachter- Entwurfsmuster. Wir werden in Kürze alle Musterstandards, beliebte Variationen und Beispiele mit Beispielen besprechen.
-
Wenn Sie eine Art von Sammlungen wie Arraylist in C# verwendet haben und das Array durchlaufen, haben Sie ein grundlegendes Iterator- Entwurfsmuster verwendet.
-
Der folgende Code ist ein Beispiel für ein grundlegendes Ausnahmebehandlungs-/ Verantwortungskettenmuster.
-
Kopiercode ausblenden
-
try{ }catch(Exception ex){ } finally{ }
Verschiedene Bereiche von Design Patterns
Es gibt andere Terminologien in der Software als Design Patterns. Einige von ihnen beziehen sich oft auf Design Patterns, die wir bisher besprochen haben, und einige von ihnen sind völlig unabhängig davon.
Was wir bisher oben besprochen haben, wird manchmal als „ Implementation Design Patterns “ bezeichnet.
Es gibt andere, wie Architekturmuster, Rahmenmuster, Sprachmuster (meistens als Sprachkonstrukte bezeichnet).
Sie sind Muster, die auf verschiedenen Ebenen angelegt sind … wie Sprachmuster sind Muster, die als Teil von Programmiersprachen wie C# / Java implementiert sind, als die Merkmale / Konstrukte der Sprache. Einige davon haben wir bereits gesehen.
Alle obigen Beispiele für Subjektbeobachter, Abfangfilter usw. werden als Sprachkonstrukte in alle gängigen höheren Programmiersprachen aufgenommen, die nach C kamen.
Architekturmuster sind diese Standardmodelle der Softwarearchitektur, die sich im Allgemeinen auf verschiedene Methoden zum Platzieren oder Verknüpfen von Modulen oder Schichten oder Schichten beziehen, aus denen die vollständige Anwendung besteht.
Dies ist völlig unabhängig von Entwurfsmustern im Sinne von Codierung/Programmierung, die … aber sie haben dieselben Antworten auf Warum/Was, wie in diesem Artikel diskutiert.
Rahmenmuster haben auch nichts mit unserer Erörterung von Entwurfsmustern zu tun. Wenn Frameworks wie .NET spezielle Mittel zum Protokollieren von Fehlern oder Verfolgen von Codeausführungsrouten einfach durch die integrierten Methoden oder Objekte des Frameworks implementieren, werden solche Mechanismen als Framework-Muster bezeichnet.
Einige Beispiele in .NET Framework beinhalten die StackTrace-Funktion, die Klassenattributfunktion mit [] eckigen Klammern über Klassen-/Methodendefinitionen usw. Wenn wir solche Funktionen verwenden, codieren wir mit den integrierten Mustern des Frameworks.
Ich hoffe, dieser Artikel hilft dabei, einen Überblick über Entwurfsmuster und verwandte Terminologien zu geben.
Bisher haben wir nur darüber gesprochen, was die Standards sind und wie wichtig sie sind, aber wir haben nicht darüber gesprochen, was die Standardmuster selbst sind.
Lizenz
Dieser Artikel ist zusammen mit dem dazugehörigen Quellcode und den Dateien unter The Code Project Open License (CPOL) lizenziert.