Komponentenbasierte Softwaretechnik: Was ist heute noch geblieben?
Seite 2: Domänenorientierte Schichtenarchitektur
Die implementierten Komponenten erstrecken sich von den technischen (z. B. Betriebssystem) und solchen für die Benutzeroberflächen bis hin zu spezifischen Fachkomponenten. Erstere sind einfacher wiederzuverwenden und wenig spezifisch. Letztere sind domänen- beziehungsweise systemspezifisch und somit bezüglich der Wiederverwendung eingeschränkt (s. Abb. 3).
Techniken zur komponentenbasierten Softwaretechnik
Die Mutter aller Techniken für die komponentenbasierte Softwaretechnik stellt die Objektorientierung dar. Heute sind die objektorientierten Konzepte in der Programmiersprache wie Vererbung, Polymorphie und Kapselung für die Softwarekomponenten nicht mehr weg-zu-denken – für eine Hello-World-Anwendung und ein schnelles Skripten vielleicht nicht wichtig aber für die Wartung einer nicht trivialen Anwendung lebensnotwendig. Interessanter Nebenaspekt der objektorientierten Programmierung ist, dass ihr grundlegendes Merkmal – die Vererbung – anfangs als Allheilmittel gesehen, heute allerdings mit großer Skepsis betrachtet wird. Zusätzliche Paradigmen wie deklarative sowie funktionale Spracherweiterungen integriert man heute oft in die objektorientierten Programmiersprachen. Die Programmiersprache Java beispielsweise beherrscht einige der Paradigmen. Weitere wurden im Laufe der Jahre mehr oder leider auch weniger elegant integriert. Noch nicht integrierte Paradigmen stehen in Form von Frameworks und Bibliotheken zur Verfügung.
Entwickler wollen jedoch konkret wissen, welche Techniken helfen können, um die Wiederverwendbarkeit von Komponenten zu vereinfachen. Folgende Techniken und die dazugehörigen Werkzeuge sowie Produkte ermöglichen Wiederverwendbarkeit und sollten daher in die Werkzeugsammlung jedes Entwicklers gehören:
- Aspektorientierte Programmierung (AOP): Aspekte sind heutzutage nicht mehr weg-zu-denken. Sprachkonstrukte und sogar neue Programmiersprachen für Aspekte begleiten Entwickler, um das Hauptziel der Wiederverwendbarkeit auf der komponentenübergreifenden Funktionalitäten (Cross-Cutting Concerns) zu ermöglichen. Auch in der Zeit von Microservices bleibt AOP aktuell. Service-Meshes beziehungsweise das Side-Konzept für Microservices basieren auf dem Konzept der Aspektorientierung. Produkte wie Istio und Linkerd setzen die Idee eines Servic-Mesh um.
- Geschäftsregeln (Business Rules): In irgendeiner Form spielen Regeln bei der Geschäftsanwendungen eine große Rolle. Diese können sowohl mit if-then-else-Konstrukten als auch mit anderen Techniken implementiert werden. In größeren Projekten lassen sich Geschäftsregeln mit einem Orchestrator beziehungsweise einem Workflow implementieren. Produkte wie Camunda Zeebee und Netflix Conductor sind Beispiele in diesem Bereich für Microservice-Architektur.
- Generator-basierte Programmierung: Alles, was nicht von einem Framework abgedeckt werden kann und wiederholbar umzusetzen ist, lässt sich mit Generatoren vereinfachen. Generatoren gehören zum Paradigma der Metaprogrammierung. Diese Basistechnik sollte jeder Softwareentwickler beherrschen. In einigen Programmiersprachen sind Generator-Techniken bereits fester Bestandteil des Software Development Kit (SDK). In Java beispielsweise bietet APT (Annotation Processing Tool) einen integrierter Generator an. Diese Techniken beschränken sich jedoch nicht nur auf die Metaprogrammierung in einer Programmiersprache. In einer Microservice-Architektur lassen sich beispielsweise die Schnittstellen – meistens als REST-API – aus einer Beschreibungssprache wie OpenAPI generieren.
Techniken zur komponentenbasierten Softwaretechnik | Mikroprogrammierung | Makroprogrammierung |
AOP | • Innerhalb einer Anwendung mit einer Programmiersprache | • Microservices mit Service Mesh und Side Car |
Geschäftsregeln |
• BPMN Prozesse • if-then-else |
• Microservices Orchestrator |
Generatoren |
• Java APT • UML2Java |
• OpenAPI Generator |