Commit c670341c authored by Jens Ehlers's avatar Jens Ehlers
Browse files

Link fixes

parent a360fd7c
......@@ -38,12 +38,12 @@
<li><i>Specified Interfaces</i>: Eine Komponente spezifiziert ihre Schnittstelle nach außen. Andere Komponenten oder ein menschlicher Anwender können nur über diese Schnittstelle mit der Komponente interagieren. Das Verhalten der Komponente ist dabei entsprechend dem sogenannten <a href="https://en.wikipedia.org/wiki/Design_by_contract">"Design-by-Contract-Prinzip"</a> zugesichert. Dazu zählen z.B. die Typisierung von Input- und Return-Argumenten, die Angabe möglicher Exceptions und ggf. spezieller Vor- und Nachbedingungen. Alles was nicht in der Schnittstelle beschrieben ist, stellt sich für den Aufrufer als <i>Black Box</i> dar.</li>
<li><i>Explicit Context Dependencies</i>: Eine Komponente hängt von definierten Prämissen bezüglich ihres Ausführungskontextes ab, die zur Laufzeit permanent erfüllt werden müssen. Diese Abhängigkeiten können z.B. enthalten:
<ul>
<li>Erforderliche Schnittstellen, die zur Laufzeit von anderen Komponenten im System bereitgestellt und implementiert werden (s. <a href="unit-dependency-injection" class="navigate">Dependency Injection</a>)</li>
<li>Erforderliche Schnittstellen, die zur Laufzeit von anderen Komponenten im System bereitgestellt und implementiert werden (s. <a href="#unit-dependency_injection" class="navigate">Dependency Injection</a>)</li>
<li>Verfügbarkeit bestimmter Ressourcen wie Datenbanken oder Dateisystempfade</li>
<li>Konkrete Anforderungen an eine Laufzeitumgebung (z.B. JVM-Version), an ein Betriebssystem oder an Treiber zur Kommunikation mit Peripheriegeräten</li>
</ul>
</li>
<li><i>Independent Deployment</i>: Eine nicht weiter unterteilte Basiskomponente ist durch den Anspruch begrenzt, dass jede Komponente unabhängig von anderen Komponenten bereitgestellt werden kann, was i.d.R. auch unabhängige Lauffähigkeit impliziert. An dieser Stelle wird auf das folgende Kapitel zu <a href="unit-microservices" class="navigate">Microservices</a> verwiesen.</li>
<li><i>Independent Deployment</i>: Eine nicht weiter unterteilte Basiskomponente ist durch den Anspruch begrenzt, dass jede Komponente unabhängig von anderen Komponenten bereitgestellt werden kann, was i.d.R. auch unabhängige Lauffähigkeit impliziert. Dieser Anspruch wird durch eine <a href="https://martinfowler.com/articles/microservices.html">Microservice-Architektur</a> auf Basis von <a href="https://de.wikipedia.org/wiki/Containervirtualisierung">Containervirtualisierung</a> (in der Praxis insbesondere <a href="https://www.docker.com/">Docker</a>) erreicht. Der Begriff <i>Service-orientierte Architektur (SOA)</i> impliziert zwar, dass eine Anwendung zur Entwurfszeit in lose gekoppelte Komponenten gegliedert wurde, die aber typischerweise nicht unabhängig voneinander bereitgestellt werden können.</li>
<li><i>Third-party Composition</i>: Komponenten, die durch Dritte erstellt worden sind, können wiederverwendet werden. Es erfolgt eine explizite Rollentrennung zwischen Anbieter und Anwender einer Komponente. Ein Anbieter fungiert als Entwickler, der die Funktionalität einer Komponente implementiert, deren Schnittstelle und Abhängigkeiten angibt und diese in einem Repository veröffentlicht, aus dem zukünftige Anwender die Komponente (ggf. lizenzpflichtig) abrufen können. Ein Anwender kann seinerseits als Architekt arbeiten, indem er verschiedene Basiskomponenten so zusammenstellt, dass eine höherwertige Komponente entsteht, für die er selbst als Anbieter auftritt. Die folgende Abbildung skizziert die verschiedenen Rollen in der komponentenbasierten Entwicklung. Eine Person oder ein Team kann natürlich auch mehrere Rollen gleichzeitig einnehmen.</li>
</ul>
......
......@@ -3,7 +3,7 @@
<img src="media/patterns_facade.png" style="width:500px">
<label>Entwurfsmuster Fassade</label>
<p>Eine Fassade entkoppelt die Komponenten des entwickelten Systems von seinen Clients. Die Clients dürfen ausschließlich über die Fassade auf das System zugreifen. Hinter der Fassade gibt es mehrere Komponenten oder Subsysteme, die ihrerseits definierte Schnittstellen aufweisen und als Bausteine das System selbst verkörpern. Die Komponenten sind häufig viel komplexer, als es ein Client benötigt. Sie können in unterschiedlichen Programmiersprachen, mittels verschiedener Frameworks realisiert sein und in heterogenen Laufzeitumgebungen bereitgestellt werden (s. Kapitel <a href="#unit-2-2">Komponenten-basierte Architektur</a>). Die Fassade greift ihrerseits auf diese Komponenten zu und verbirgt deren Komplexität vor den Clients. Eine Methode der Fassade kann z.B. eine logische Folge von internen Methodenaufrufen zu einer höherwertigen Funktionalität zusammenführen.</p>
<p>Eine Fassade entkoppelt die Komponenten des entwickelten Systems von seinen Clients. Die Clients dürfen ausschließlich über die Fassade auf das System zugreifen. Hinter der Fassade gibt es mehrere Komponenten oder Subsysteme, die ihrerseits definierte Schnittstellen aufweisen und als Bausteine das System selbst verkörpern. Die Komponenten sind häufig viel komplexer, als es ein Client benötigt. Sie können in unterschiedlichen Programmiersprachen, mittels verschiedener Frameworks realisiert sein und in heterogenen Laufzeitumgebungen bereitgestellt werden (s. Kapitel <a href="#unit-architecture">Modularisierung und Architektur</a>). Die Fassade greift ihrerseits auf diese Komponenten zu und verbirgt deren Komplexität vor den Clients. Eine Methode der Fassade kann z.B. eine logische Folge von internen Methodenaufrufen zu einer höherwertigen Funktionalität zusammenführen.</p>
<p>In der Praxis sind Fassaden-Klassen sehr häufig vorzufinden, da nahezu jedes System über die Jahre an Komplexität gewinnt und so irgendwann der Bedarf nach einer Fassade entsteht, um diese interne Komplexität überschaubar zu gestalten. Ein Softwaresystem entwickelt sich i.d.R. organisch weiter, dadurch dass verschiedene Entwickler an verschiedenen Stellen neue Klassen, Beziehungen und Methoden hinzufügen. Das System wird im Laufe seiner kontinuierlichen Weiterentwicklung sukzessive in Komponenten zerlegt, die von unterschiedlichen Teams betreut werden.</p>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment