jambit ToiletPaper: Architecture in Software Systems – How Pattern Languages Increase Readability and Code Comprehension

Architektur in Softwaresystemen: Wie Mustersprachen Lesbarkeit und Code-Verständnis erhöhen

Problem: Schlechte oder gänzlich fehlende Architektur im Softwaresystem

Wer kennt dieses typische Szenario unter Entwicklern nicht? Ein Entwicklungsteam steht in der Kaffeeküche zusammen und moniert die schlechte oder gänzlich fehlende Architektur im Softwaresystem. Dieses Szenario tritt verstärkt bei Wartungs- und Weiterentwicklungsprojekten von älteren Softwaresystemen auf. Das Alter spielt hierbei eine entscheidende Rolle. Je älter ein System ist, desto höher ist die Wahrscheinlichkeit, eine stark erodierte Architektur [1] vorzufinden.

Was versteht jedoch das Entwicklungsteam in diesem Szenario unter Architektur und was fehlt ihm?

Lösung: Mit Mustersprachen Lesbarkeit und Code-Verständnis erhöhen

Dem Entwicklungsteam fehlt wahrscheinlich eine konsistente und einheitliche Verwendung von Mustersprachen [2] im vorliegenden Softwaresystem, welche die Lesbarkeit und das Code-Verständnis deutlich erhöhen würden. Mustersprachen gehen dabei einen Schritt weiter als Architekturstile (Schichten, Microservices etc.) und geben auf einer hierarchisch detaillierteren Ebene Strukturierungsvorgaben für Klassen (bzw. Module, Packages etc.).

Eine Mustersprache definiert jeweils ein Set von Musterelementen und gibt dafür Regeln an. Diese Regeln legen fest, welche Verantwortlichkeiten die einzelnen Musterelemente haben und wie diese miteinander interagieren dürfen (Gebots- und Verbotsregeln) [3]. In anderen Worten: Mustersprachen definieren den Einsatz von Entwurfsmustern und deren einheitliche Verwendung im gesamten Softwaresystem.

Im Projekt ist es nie zu spät, sich mit Mustersprachen zu beschäftigen und diese im individuellen Kontext einzusetzen - und zwar konsistent und einheitlich im gesamten Code. Eine Dokumentation der Mustersprache ist nicht nur hilfreich, sondern auch empfehlenswert. Es spielt hierbei keine Rolle, ob es sich um ein Wartungs- oder Greenfield-Projekt handelt. In diesem Sinne, sind Mustersprachen ein gutes Hilfsmittel, damit in der Kaffeeküche mehr Zeit für tiefgreifendere Gespräche zu Katzenvideos und Computerspielen bleibt.

Beispiele für Musterelemente und deren Gebots- und Verbotsregeln​

Abbildung der Geschäftslogik in der Service-Schicht (Gebots- und Verbotsregeln​):

  • Musterelement Service-Interface: Interface im Package com.example.<produktname>.service.api mit der Namenskonvention *Service
  • Musterelement Service-Implementierung: Klasse im Package com.example.<produktname>.service mit der Annotation @Service; Namenskonvention *Service<xyz> (Standard: xyz = Impl)

Verwendung des Spring Web MVC im Projekt (Auszug, Gebots- und Verbotsregeln):

  • Musterelement Model: Wird vom Musterelement Controller erstellt und befüllt; enthält keine Logik
  • Musterelement View: Template-Sprache (z. B. Thymeleaf mit Templates (*.html) im Verzeichnis resources/templates); Hat nur Zugriff auf das Musterelement Model und nicht auf den Controller
  • Musterelement Controller: Definiert die Endpoints über @RequestMapping-Annotationen und deren Spezialisierungen; Die Klasse hat die Annotation @Controller und als Namenskonvention *Controller; Controller sind zustandslos und enthalten keine Geschäftslogik

Weiterführende Aspekte

  • [1] M. Mair und S. Herold, „Towards Extensive Software Architecture Erosion Repairs“ in Software Architecture. 7th European Conference, ECSA 2013, Montpellier, 2013.
  • [2] Christopher Alexander, A Pattern Language. Towns, Buildings, Construction
  • [3] C. Lilienthal, Langlebige Software-Architekturen: Technische Schulden analysieren, begrenzen und abbauen, dpunkt.verlag, 2015.

---

Autor: Matthias Mair / Senior Software Architect / Business Division Automotive Bavaria

Architektur in Softwaresystemen: Wie Mustersprachen Lesbarkeit und Code-Verständnis erhöhen

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.