Softwaretechnik

Lesson 7
Architektur Patterns und Dokumentation

Pattern

Muster wie wiederkehrende Probleme gelöst werden können

Abhängigkeitsmuster

Dreischicht Architektur

Variante 1

  1. Client (z.B. Browser)
  2. Applikationsserver
  3. Datenbank

Variante 2

Innerhalb eines Applikationsservers (oder Clusters)
  1. UI
  2. Domänenlogik
  3. Persistenz

Wie sehen hier die statischen Abhängigkeiten aus?

Naive Variante

UI

- hängt ab von -> 

Domain Logic

- hängt ab von ->

Persistence

Problem

Welche von den Komponenten ist die stabilste?

Domänen Logik

Stabile Komponenten sollten nicht von Instabilen abhängen, da sich die Instabilität sonst übertragen kann.

Hexagonale Architektur

UI --> Domain Logic
Persistence --> Domain Logic
Schnittstelle --> Domain Logic

Transaktionsmuster

ACID


Atomar
Consistence
Isolation
Durability

Isolation in der Realität nur eingeschränkt gegeben

Verarbeitung einer Aktion


User Aktion 

-> Abarbeiten der Domain Logik 

-> persistentes speichern der Daten (gegebenenfalls inklusive verfügbar machen über mehrere Knoten)

-> Feedback an den User.

Problem

Performance und Skalierbarkeit
Persistent speichern ist langsam

Eventual Consistent

User Aktion 
-> erzeugen eines Events in Domain Logik Queue 
-> User kann weiter arbeiten

Event in Domain Logik Queue 
-> abarbeiten der Domain Logik 
-> Event in Persistenz Queue

Event in Persistenz Queue 
-> speichern 
-> Erfolgs Event in User Queue

In Problemfällen: jederzeit ein Event in die User Queue

Vorteile

Parallelisierbar
dadurch skalierbar
weniger Wartezeiten für den User

Nachteile

komplexere Szenarien müssen durchdacht werden, 
da Events auch in Situationen kommen zu denen sie eigentlich keinen Sinn machen.

Interaktion zwischen 

Client und Server

RPC (Remote Procedure Call)

  • Es wird eine Schnittstelle spezifisch für die Anwendung entworfen. 
  • Der Server implementiert diese Schnittstelle.
  • Der Client benutzt die Schnittstelle. 
  • Clientseitig wird ein Stub deployed der Aufrufe über eine Transportprotokoll an der Server übermittelt.
  • Zustand der Anwendung wird auf dem Client und dem Server gehalten.

Problem

Infrastruktur kann mit der Kommunikation nichts anfangen. (kein Proxy, kein Single Sign On, kein Caching)

Client muss den Server sehr genau kennen. (Keine Suchmaschinen)

Client und Server können nicht einfach gewechselt werden. (Scalability, Availability)

REST (Representational State Transfer)

  • Der Server bietet identifizierbare Ressourcen (Web: URLs)
  • Auf jeder Ressource können die gleichen Aktionen durchgeführt werden
  • Diese Aktionen sichern gewisse Dinge zu
  • Als Resourcen wird Hypertext verwendet
  • Der Client enthält keinen Zustand

HTTP Verben

  • GET: Keine Seiteneffekte (nullipotent)
  • PUT, PATCH, DELETE: Idempotent (erste Durchführung einer Aktion hat einen Seiteneffekt, eine Wiederholung hat keinen weiteren Effekt)
  • POST: Seiteneffekt behaftet.

Hypertext (HTML)

Links machen weitere Resourcen entdeckbar

Vorteile

  • Eine Anwendung muss nur eine Start URL kennen.
  • Durch die Garantien der Verben kann Infrastruktur implementiert werden, die dies ausnutzt:
  • Caches, Load Balancing und dergleichen mehr

Architektur Dokumentation

Aufgabe: Hexagonale Architektur

Implementieren sie das CreateCD Beispiel wie in der Vorlesung skizziert

Mindestens die ersten 5, die ihren Source Code auf Github allgemein verfügbar machen, werden gereviewed.

Verfügbar machen bedeutet:
  • Als Wiki Artikel im Repository zur Vorlesung
  • Oder als eigenes Repository

Aufgabe: Arc42 Template durcharbeiten


Sie sollten in der Lage sein Fragen der Art:
"Was wird in Abschnitt XYZ dokumentiert?" 
beantworten können.

Weiterführende Literatur

Effektive Softwarearchitekturen: Ein praktischer Leitfaden (Starke)

Softwarearchitekturen dokumentieren und kommunizieren: Entwürfe, Entscheidungen und Lösungen nachvollziehbar und wirkungsvoll festhalten (Zörner)

Softwaretechnik Lesson 7

By Jens Schauder

Softwaretechnik Lesson 7

  • 1,492