# Table of Contents 1. [A 2.1 Schichten](#orga9d1c5e) 2. [A 2.2 Pipes und Filters](#orga6b559c) 3. [A 2.3 Service-Orientierte Architektur](#orgacb6e3d) 4. [A 2.4 Model-View Controller](#org9de533a) <a id="orga9d1c5e"></a> # A 2.1 Schichten - Erklären Sie die Grundzüge des Schichten Architekturmusters: Die Software und Ihre komponenten werden in verschiedene Schichten eingeteilt, sodass die Aufgabenverteilung in der Software in modularen Teilen implementiert wird. Interfaces verbinden Schichten miteinander für einen klaren Datenfluss. Probleme entstehen oft bei der Trennung von Schichten, sowie bei der verwaltung von States - da hier oft Probleme verschiedene Schichten durchlaufen. - Kann eine Schicht `n` die Dienste einer Schicht `n-2` direkt benutzen? (Annahme: Root als oberste schicht mit n = 0) Eine Schicht n ist _nicht_ in der Lage dazu, die Dienste einer Schicht n-2 zu benutzen. Ansonsten wurde _nicht_das Schichtenmodell benutzt. <a id="orga6b559c"></a> # A 2.2 Pipes und Filters - Erklären Sie die Grundzüge des Pipes und Filters Architekturmusters. Beim Pipes- und Filtermodell werden die Ergebnisse nach einem Verarbeitungsschitt (Filter) auf Daten durch eine 'Verbindung' (Pipe) zum nächsten Verarbeitungschritt geleitet. Des Gesamtsystem besitzt dann viele unabhängige (o.a. pure) Komponenten die durch Nacheinanderschalten das geforderte Problem lösen. - Gehen Sie davon aus, dass Sie folgende Filter zur Verfügung haben. - **read :** Liest aus einer Quelle eine Liste von Namen und Vornamen ein. Die Ausgabe besteht aus einer mit Zeilenumbrüchen getrennte Liste. Jeder Eintrag enthält Kommas um den Vornamen vom Nachnamen zu trennen. - **sortName :** Sortiert einen übergebene Liste nach Nachnamen. - **sortForeName:** Sortiert eine übergeben Liste nach Vornamen. Verwenden Sie das Zeichen | um zwei Filter durch einen Pipe zu verbinden (analog zu den Unix-Shells). Schreiben Sie einen Ausdruck, der eine Liste von Namen einließt und nach Nachname, dann nach Vorname sortiert. Beispiel: – Ulrich, Albrecht – Manual, Maier – Sigi, Maier – Hans, Papenheimer read | sortForeName | sortName - Gehen Sie davon aus, dass Sie in Java in Form von statischen Methoden in einer Klasse die drei oben genannten Filter zur Verfügung haben. Geben Sie mögliche Typsignaturen der Methoden an, und schreiben Sie den Java Ausdruck für das Sortieren der Liste wie in der vorherigen Teilaufgabe beschrieben auf. ```java class NameList { public NameList() { ... } // constructor public NameList read(Source source) { ... } // read source public NameList sortName() { ... } // sort by last name public NameList sortForeName() { ... } // sort by forename } Verwendung wie folgt: NameList nm = new NameList(); nm.read(source).sortForeName().sortName(); Alternativ: ```java class Name { ... } class NameProcessing { public List<Name> read(Source source) { ... } // read source public List<Name> sortName() { ... } // sort by last name public List<Name> sortForeName() { ... } // sort by forename } ``` Verwendung wie folgt (innerhalb der NameProcessing-Klasse): List<Name> nm = sortName(sortForeName(read(source))); - Wenn Sie das Muster Pipes und Filters in Java und in Form von Befehlen vergleichen, was fällt Ihnen auf? Das funktionsprinzip ist gleich, nur die Syntax geändert <a id="orgacb6e3d"></a> # A 2.3 Service-Orientierte Architektur - Erklären Sie die Grundzüge einer Service-Orientierten Architektur. Bei der Service Orientieren Architektur wird die Organisation des Codes an den Geschäftsprozessen orientiert. - Ein Dienst ist eine IT-Repräsentation von fachlicher Funktionalität.[4] - Ein Dienst ist in sich abgeschlossen (autark) und kann eigenständig genutzt werden. - Ein Dienst ist in einem Netzwerk verfügbar. - Ein Dienst hat eine wohldefinierte veröffentlichte Schnittstelle (Vertrag). Für die Nutzung reicht es, die Schnittstelle zu kennen. Kenntnisse über die Details der Implementierung sind hingegen nicht erforderlich. - Ein Dienst ist plattformunabhängig, d. h. Anbieter und Nutzer eines Dienstes können in unterschiedlichen Programmiersprachen auf verschiedenen Plattformen realisiert sein. - Ein Dienst ist in einem Verzeichnis registriert. - Ein Dienst ist dynamisch gebunden, d. h. bei der Erstellung einer Anwendung, die einen Dienst nutzt, braucht der Dienst nicht vorhanden zu sein. Er wird erst bei der Ausführung lokalisiert und eingebunden. - Ein Dienst sollte grobgranular sein, um die Abhängigkeit zwischen verteilten Systemen zu senken. ![img](../../../orgmode/assets/A_2.3_Service-Orientierte_Architektur/2019-10-24_08-23-53_465px-SOA_Elements.png) - Erklären Sie die Rollen von Serviceanbieter, Servicebenutzer und Serviceverzeichnis. - Serviceanbieter :: Stellt einen Dienst zur verfügung - Servicebenutzer :: Sucht und benutzt dienste die im Serviceverzeichnis angeboten werden - Serviceverzeichnis :: Gibt verfügbare Services an <a id="org9de533a"></a> # A 2.4 Model-View Controller Skizzieren Sie die Implementierung einer MVC Lösung für das Telefonbuch wie aus SE II bekannt, indem Sie die Schnittstellen der drei beteiligten Komponenten aufschreiben. - Model :: - View :: - Controller ::