LE 7 | ARC - Objektorientierte Architekturen - DdB Flashcards
Gründe für eine gute Softwarearchitektur
Gründe für eine gute Softwarearchitektur
- Software sollte nicht als großer, unstrukturierter Haufen vorliegen (unübersichtlich)
- Komplexer Code kann besser verstanden werden
- Man findet sich besser zurecht
- Code kann einfacher erweitert werden
- Struktur im System spiegelt Domänen und Bereiche wieder, wodurch sie besser
- getrennt und einzeln bearbeitet werden können
- Korrektheit und Qualität lassen sich durch gute Architektur besser sicherstellen
- Wartung ist ein wesentliches Ziel der Softwarearchitektur
- Erreichen von Kohäsion
- lm Wesentlichen:
- Änderbarkeit
- Wartbarkeit
- Lesbarkeit
- Qualität
Architektur Rahmen
Architektur Rahmen
-
Was?
- Die Art der Architektur (Software, Daten, Enterprise, etc.)
-
Wo?
- Auf welchen Software-Schichten?
- Wo befinden sich Komponenten?
- Welche Ebenen gibt es?
-
Warum?
- Warum diese Architektur für dieses Problem?
-
Womit?
- Welche Patterns und Frameworks, Technologiestacks, etc.
-
Wer?
- Architekt muss mit Designern, Anforderungsermittlern, Entwicklern austauschen um die passende Architektur zu finden
-
Wie?
- Vorgehensweise des Architekten
Architektur Werkzeuge
Architektur Werkzeuge
- Ebenen zur Strukturierung des Systems (keine „TooIs”)
- Vision
- Architektur ist eine Vision vom Gesamtsystem und den einzelnen Bestandteilen
- Visionen können Spezifikationen ergänzen (z. B. Hinweise auf Patterns)
- Packages/ Namensgebungen
- Wichtigsten Gestaltungsmíttel für Architekten
- Namensräume helfen ideal bei der Strukturierung und Trennung
- Vertikal in Schichten (Packages)
- Horizontal in fachliche Komponenten (innerhalb der Schicht/ Klassen)
- Trennen und Gruppieren
- Dinge klein halten, statt zusammenzufassen, macht es einfacher
- Namensgebung beachten um zu trennen oder Zusammengehörigkeit anzuzeigen
- Patterns/ Kapselung / Abstraktion
- Design Pattern
- Ist eine Architektureinheit
- Design Pattern strukturiert Komponenten und gibt deren Kommunikation und Wechselwirkungen vor
- Kapselung
- Dinge nach außen verstecken
- Vermeidung von Spaghetticode
- Verringert Kopplung
- Klassen: public/ private Methoden
Packages: Fassaden-Pattern g
- Abstraktion
- Interfaces und Abstrakte Klassen verwenden
- Konzepte zur Abstraktion
- Richtige Mischung aus abstrakten und konkreten Komponenten ist weniger änderungsempfindlich
- Die Kopplung kann verringert werden
Kohäsion / Kopplung
- Kohäsion bestimmt die Zusammengehörigkeit von Komponenten
- Jede Komponente erfüllt genau ihre eine Aufgabe
- Fachliche Zusammengehörigkeit
- Bei der Package-Aufteilung beachten
- Kopplung
- Kopplung achtet nur auf Benutzrelationen
- Grad der Abhängigkeit zwischen Komponenten
- Schwache Kopplung erstrebenswert
- Dependency injection
- Patterns
- Kommunikation über Protokolle
- Stark gekoppelte Systeme werden als „spröde” bezeichnet
- Initial stabil aber bröckeln wenn sie größer werden
Standards
Standards
- Die Entscheidung für eine bestimmte Technologie ist gleichzeitig eine Entscheidung für bestimmte Standards die eingehalten werden müssen
- Bsp. JEE: Verwendung von Java Beans
- Bsp. Ruby: MVC-Architektur
- Coding Standards
- Werkzeugstandards (JUnit, Ant, etc.)
Architektur Prinzipien
Architektur Prinzipien
- lnkrementalität: durch prototyping und schrittweises Wachstum
- Lose Kopplung
- Entwurf für Veränderung: Testen was passiert, wenn Komponenten sich ändern
- Hohe Kohäsion: fachliche Technologie-Shifts
- Rückverfolgbarkeit: Änderungen, Datenfiüsse, Fehler transparent machen
- Abstraktion: Interface als explizite Schnittstelle, Subclassing, Polymorphie
- Information Hiding: Fassaden, Black-Box-Prinzip, Schichtenbildung
- Separation of Concems: Analyse der Zuständigkeiten
- Modularität: Anwendung der Sprachmittel für Gruppierung
- Selbstdokumentation: Namensgebung, interne und externe Dokumentation
Architektur Ebenen
Architektur Ebenen
- Vertikale Ebene
- Technische Schichten
- Unterteilen, Benennen, Strukturieren
- Horizontale Ebene
- Fachliche Ausprägungen
- Views
- Controller
- Etc.
- Geschäftssicht:
- Fachlichkeit, Organisation, Geschäftsprozesse, etc.
- Logische Sicht:
- Bausteine der Anwendung, Schnittstellen, stanzen, etc.
- Datensicht:
- Datenbanken, Ein- und Ausgabequellen, Datenfluss
- Technologiesicht:
- Welche Tools, Frameworks, lDEs, Tests, etc. ?
- Verteilungssicht
- Deployment, Installation, Konfiguration, etc.
Architekturstile
Architekturstile
- Quasi-Patterns für Architekturen
- Allgemeine Philosophie:
- Es gibt Komponentengruppen die miteinander agieren
- Wie ist die Anordnung der Komponenten?
- Was ist wem vorgeschaltet?
- Wer erbringt welche Aufgabe?
- Welche Topologie liegt vor?
- Konnektoren sind notwendig
- Über definierte Schnittstellen werden informationen ausgetauscht und abgerufen
- Es gibt Constraints
- Bedingungen die erfüllt werden müssen
- Einschränkungen was getan werden darf
- A darf nicht mit B kommunizieren
- Information Hiding darf nicht gebrochen werden
Ordnung der Architekturstile
Ordnung der Architekturstile
- Die Erkenntnis von welcher „Problemklasse“ eine Aufgabenstellung ist legt schon einen Großteil der zu verwendenden Architektur fest.
-
Kommunizierende Prozesse
- Event-Systeme (impliziter/ expliziter Aufruf)
- Middleware Systeme die Nachrichten als Events auffassen
- Nachrichten werden in Queues gehalten und von dort aus weiterverarbeitet
-
Datenorientierter Fluss
- Stapelverarbeitung (Batch-Processing)
- Pipes & Filters
- Compiler
- Informationen werden kettenartig weitergereicht
- Jeder Filter trägt zur Verarbeitung bei
-
Call and Return
- Prozedurale Programmierung/ OO-Programmierung
- Schichtenorientiert
- Sichtweise in der Entwickler normalerweise arbeiten
-
Datenzentriert
- Repository
- Blackboard
- Repo: Objekte werden nach einem Schlüssel abgelegt
- Kernelement sind die gespeicherten Daten (können auch Logik enthalten)
- Blackboard: nicht deterministisch und zu großer lösungsraum
- Agenten bedienen sich an Teilen des BB und lösen Teilprobleme (Bilderkennung, DNA-Sequenzen, etc.)
-
Virtuelle Maschine
- lnterpreter
- Regelbasierte Systeme
- Problem kann in einer Sprache (DSL) oder in Form von Regeln vorliegen
- Ähnlich Automaten (Anfangszustand -> abarbeiten -> Ergebnis/Endzustand)
- Steuerungsprobleme in Hardware
- Suchanfragen im Semantic Web
Technologiearchitekturen Übersicht
Technologiearchitekturen Übersicht
-
Übersicht (nicht vollständig)
- CMS
- Suchmaschinen
- Portal Frameworks
- Client-Server
- Rich- und Thin-Client
- N-Tier
- Container- / Komponenten-Architektur
- Middleware (MOM)
- Serviceorientiert (SOA)
- Enterprise Service Bus (ESB)
- Peer-to-Peer P2P
- Application Server
Anti-Pattern: Monolith
Anti-Pattern: Monolith
- Monolithische Systeme sind keine Architektur sondern nur „ein großer Klumpen”.
- Sie sind nicht wartbar oder erweiterbar
- Passend für sehr, sehr kleine Projekte mit maximal einer Person
Client-Server
Client-Server
- Zugriffszeiten: Verteiltes System oder nicht? (zentral / dezentral)
- Ausfallsicherheit: Datenbestände repliziert vorliegen oder nicht?
- Datenbestände oder Dienste liegen auf zentralen Servern und werden durch Clients genutzt (Online-Spiele, Google, etc.)
Rich- Thinclient
Rich- Thinclient
- Wird ein Webbrowser zur Arbeit mit dem System benötigt oder nicht
- „echte“ Rich-Client = Desktopanwendung, Thin-Client = Browserzugriff
- Rich-Clients im Browser durch Silverlight/Air/Flex
N-Tier
N-Tier
- Beschreibt eine Mehrschicht-Architektur
- Die meisten klassischen Systeme sind so gestaltet
- Einfachere Entwicklung durch Trennung der Schichten
- Auf allen Schichten kann verteilt werden was Load-Balancing, Ausfallsicherheit, etc. erhöhen kann
- Logik-Schicht, View-Schicht, Daten-Schicht
Container / Komponentenarchitektur
Container / Komponentenarchitektur
- Containerarchitektur / Container-System
- Nimmt Komponenten auf
- Übernimmt Funktionalitäten wie Lastverteilung und Sicherheit
- Komponente wird durch den Container verwaltet (Pool)
- Transaktionen, Persistenz, Ressourcenmanagement, etc. sind
- standardisiert und es werden zu verwendende APIs bereitgestellt z.B. EJB, COM
Komponentenarchitektur
Komponentenarchitektur
- Strukturierung eines Systems in Komponenten
- Komponente: Einheit von Code die eine definierte Schnittstelle hat.
- Hängt nur von sich selbst ab und kann dadurch mehrfach eingesetzt oder erweitert werden
Middleware-Architekturen (MOM)
Middleware-Architekturen (MOM)
- Middleware sind Programme die die Komponenten und Kommunikationsarchitektur verstecken sollen
- Middleware sorgt für Übermittlung komplexer und strukturierter Daten
- Komponenten oder entsprechende Daten werden über Netzwerke in irgendeiner Form bereitgestellt (meist TCP/IP, http, WebServices)
Serviceorientierte Architekturen (SOA)
Serviceorientierte Architekturen (SOA)
- Strikte Ausrichtung auf Dienste
- Alles unter einer einheitlichen Dienst-Schnittstelle zu Verfügung zu stellen
- Mithilfe von SOA können einzelne Systeme gekapselt werden
- SOA stellt meistens Adapter zur Verfügung (Austausch zwischen unterschiedlichen Systemen)
Enterprise Service Bus (ESB)
Enterprise Service Bus (ESB)
- Einheitliches Leitungsmedium (Bus) auf dem Producer Nachrichten verschicken welche von Consumern aufgenommen werden
- Messaging-Infrastruktur
- Filter, Konverter, Adapter zur Verbindung von unterschiedlichen Systemen mit dem Bus
Peer-to-Peer (P2P)
Peer-to-Peer (P2P)
- Rechnersysteme mit Komponenten/Teilnehmern die gleichberechtigt miteinander kommunizieren
- Es gibt keinen zentralen Server
- Systemzustand ist das System selbst und daher schwierig zu durchschauen
- Organisieren sich selbst
- Peers können anbieten und nutzen
- Verhalten, Zustand, etc. erinnern an einen Schwarm z. B. Torrent
Application Server
Application Server
- Application Server bündeln mehrere der genannten Architekturen
- Enthalten meist einen Container
- Lieferung von Containerdiensten wie Persistenz, Security, Transaktionen
- Enthalten meist einen Container
- Bieten weitere Services an
- Directory-Dienste, Kommunikationsdienste, etc.
- Skalieren ohne Änderung der Anwendung
- Logging und Monitoring
- z. B. Tomcat, JBoss, Glassfish
Ein guter Architekt …
Ein guter Architekt …
- Kann Visualisieren
- Diskutiert mit/anderen
- Hat Designerfahrung
- Kennt Design und Enterprise-Patterns
- Kann strukturieren (trennen und gruppieren)
- Hat Zuständigkeiten im Blick
- Er versteht die Geschäftsanwerıdungsfälle
- versteht, bewertet und gewichtet Aniorderungen
- Entwirft eine Architektur
- Kommuniziert die Architektur
- Setzt und Architektur und betreibt Risikomanagement
- Realisierung von Prototypen
- Erstellen von Richtlinien
- Kontrolle der Architektur