Es dient der Entkopplung des Auslösers einer Anfrage mit seinem Empfänger. Mehrere Objekte werden hintereinander geschaltet (miteinander verkettet), um gemeinsam eine eingehende Anfrage bearbeiten zu können. Diese Anfrage wird an der Kette entlang geleitet, bis eines der Objekte die Anfrage beantworten kann. Der Klient, von dem die Anfrage ausgeht, hat dabei keine Kenntnis darüber, von welchem Objekt […]
In diesem Entwurfsmuster kapselt das Kommando-Objekt einen Befehl, um es so zu ermöglichen, Operationen in eine Warteschlange zu stellen, Logbucheinträge zu führen und Operationen rückgängig zu machen. https://de.wikipedia.org/wiki/Kommando_(Entwurfsmuster)
Es trennt die Konstruktion komplexer Objekte von deren Repräsentationen, wodurch dieselben Konstruktionsprozesse wiederverwendet werden können. https://de.wikipedia.org/wiki/Erbauer_(Entwurfsmuster) Beim Builder-Pattern geht es darum, dass die Erzeugung von komplexen Objekten an Builder-Klassen übergeben wird. Dies hat der Vorteil, dass die Erzeugung auch von anderen Komponenten wiederverwendet werden kann.
Bridge Eine Brücke ist … ein Strukturmuster …, das zur Trennung der Implementierung von ihrer Abstraktion (Schnittstelle) dient. Dadurch können beide unabhängig voneinander verändert werden. https://de.wikipedia.org/wiki/Brücke_(Entwurfsmuster) Das Bridge-Pattern ist dem Adapter-Pattern sehr ähnlich. Der Unterschied liegt hauptsächlich darin, dass bei der Erstellung hier noch Einfluss auf beide Seiten genommen werden kann. Das Ziel ist, das System offen […]
Das Muster dient zur Übersetzung einer Schnittstelle in eine andere. Dadurch wird die Kommunikation von Klassen mit zueinander inkompatiblen Schnittstellen ermöglicht. https://de.wikipedia.org/wiki/Adapter_(Entwurfsmuster) Die Annahme hierbei ist, dass es bereits eine Klasse gibt, die wir nicht verändern können (Adaptee), die aber von einer anderen Klasse, die entweder auch nicht geändert werden kann oder nicht soll (Client), verwendet werden kann. In […]
Dies ist wohl das gängigste und bekannteste Pattern schlechthin. Es stellt sicher, dass von einer Klasse genau ein Objekt existiert. Dieses Singleton ist darüber hinaus üblicherweise global verfügbar. https://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster) Ein Singleton hat ein statisches Feld, in dem die einzige Instanz dieser Klasse gespeichert ist. Der Konstruktor ist ebenfalls privat. Die einzige Möglichkeit eine Instanz zu erhalten […]
UML steht für „Unified Modeling Language“ und gilt als der Standard für die Visualisierung, Dokumentation und Spezifikation von Software-Teilen. Über dieses Thema wurden einige sehr umfassende Bücher beschrieben. Ich will mich hier aber kurz fassen und nur die Themen auflisten, die für das Lesen der Design-Patterns in den nachfolgenden Beiträgen relevant sind. Vererbung Der nicht […]
In der Softwareentwicklung stehen wir oft vor wiederkehrenden Problemen, über die sich schon viele Menschen den Kopf zerbrochen haben. Daraus entstanden sind Design Patterns (oder auf Deutsch Entwurfsmuster), die für genau dieses Problem eine bewährte Lösung präsentieren. Die bekanntesten Entwickler von Design Patterns sind die „Gang of Four“, die um das Jahr 1994 das Buch […]
Wie bereits im Beitrag zu Dependency Injection erwähnt, möchte ich mich dem Thema „Unit Testing“ widmen, welches durch die Verwendung von DI wesentlich vereinfacht wird. Banal ausgedrückt geht es bei Unit Testing darum, dass eine Klasse und/oder Funktion (= Unit; Einheit) ein- oder mehrfach geprüft wird. Ziel ist die Qualitätssteigerung und dass bei Änderungen am […]
Hinter Dependency Injection (kurz DI) steht das Ziel Abhängigkeiten von Objekten und Komponenten auf ein Minimum zu reduzieren. Es gibt unterschiedliche Arten um Abhängigkeiten zu injizieren: „Constructor Injection“, „Setter Injection“ und „Interface Injection“. Nachfolgend gehe ich primär auf „Constructor Injection“ ein, da dies auch vom DI-Container, der in .NET Core enthalten ist, unterstützt wird. Im […]