Komponentenbasierte Softwaretechnik: Was ist heute noch geblieben?

Seite 2: Domänenorientierte Schichtenarchitektur

Inhaltsverzeichnis

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).

Domänenorientierte Schichtenarchitektur für Komponenten (in Anlehnung an [3]) (Abb. 3)

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:

  1. 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.
  2. 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.
  3. 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