Innere Werte, Teil 1: Symmetrie

Qualität ist das beste Rezept, hieß es einst in einer Fernsehwerbung. Neben extern beobachtbarer Qualität besitzt eine Architektur hoffentlich auch innere Werte. Was darunter zu verstehen ist, sollen meine nächsten Threads illustrieren. In diesem ersten Teil geht es um Symmetrie.

vorlesen Druckansicht 9 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Dr. Michael Stal
Inhaltsverzeichnis

Qualität ist das beste Rezept, hieß es einst in einer Fernsehwerbung. Neben extern beobachtbarer Qualität besitzt eine Architektur hoffentlich auch innere Werte. Was darunter zu verstehen ist, sollen meine nächsten Threads illustrieren. In diesem ersten Teil geht es um Symmetrie.

Mehr Infos

Es gibt eine ganze Reihe von Definitionen für Qualität. Für mich ist Qualität in Bezug auf Softwarearchitektur der Grad, mit dem das Softwaresystem eine gewünschte Eigenschaft erfüllt. Qualität kann zuweilen sehr subjektiv sein wie beispielsweise bei Ergonomie, aber manchmal auch objektiv und messbar wie zum Beispiel bei der Antwortzeit.

  • Externe Qualität bezieht sich auf nichtfunktionale Eigenschaften des Systems. Beispiele: VerfĂĽgbarkeit, Ă„nderbarkeit.
  • Interne bzw. innere Qualität beschreibt die Einfachheit des Verwendens einer Codebasis oder Architektur. "Verwenden" ist in diesem Zusammenhang sehr vielschichtig und kann sich unter anderem auf Verstehen, Ă„ndern, Erweitern von Codebasis bzw. Architektur beziehen. In gewisser Weise spiegelt der Begriff Schönheit ebenfalls interne Qualität wieder. Metriken versuchen ĂĽbrigens interne Qualität messbar zu machen, was ihnen nicht immer gelingt, aber das ist eine andere Geschichte.

Es gibt verschiedene Facetten interner Qualität. Im vorliegenden ersten Teil beschäftige ich mich mit Symmetrie.

Es gibt verschiedene Varianten von Symmetrie.

  • Strukturelle Symmetrie merkt man sich am besten mit der EselsbrĂĽcke "Wo eine öffnende Klammer ist, darf eine schlieĂźende Klammer nicht fehlen". Zum Beispiel erwarten wir intuitiv nach einem FileOpen() ein FileClose(), nach einem BeginTransaction() ein Commit() oder Rollback(). Analysieren wir das AbstractFactory-Muster unter Symmetrieaspekten, wundern wir uns darĂĽber, warum es dort ein create() aber kein delete() gibt. Wenn das Erzeugen eines Objekts so komplex ist, dass wir es hinter create() verstecken mĂĽssen, gilt es dann nicht auch fĂĽr das Zerstören?
  • Funktionale Symmetrie ist ein anderer Begriff fĂĽr konzeptionelle Integrität. Wenn wir zur Lösung eines Problems ein bestimmtes Design(pattern) verwenden, sollten wir fĂĽr jedes andere Auftreten dieses Problems dieselbe Lösung nutzen. Andernfalls mĂĽsste man zum Verstehen der Architektur/Codebasis immer mehrere Lösungsansätze verstehen. Negativbeispiel: In der Klassenbibliothek Microsoft Foundation Classes (MFC) gab es gut ein Dutzend verschiedener String-Klassen, was zu sehr komplexen EntwĂĽrfen fĂĽhren konnte.

Ist also Symmetrie immer der bessere Ansatz, das heißt der Ansatz mit der höchsten internen Qualität? Nein, denn manchmal kann Asymmetrie die einzige Option oder sogar die bessere Lösung sein.

  • Strukturelle Asymmetrie - Eine Ressource muss nicht notwendigerweise von dem freigegeben werden, der sie akquiriert hat. Beispiel: verteilte Systeme.
  • Funktionale Asymmetrie - Es könnte sinnvoll sein, verschiedene Lösungen fĂĽr das gleiche Problem zu nutzen. Beispiel: Das Observer-Pattern fĂĽr Ereignismeldungen in einer Geschäftsanwendung, aber eine festverdrahtete Liste von Beobachtern in einem eingebetteten System, um dynamische Ă„nderungen zu vermeiden.

Symmetrie ist also ein Indikator für gute Interne Qualität, aber kein Beweis.

Suchen Sie doch einmal in ihrem eigenen Design nach Symmetrie und Asymmetrie und bewerten sie die entsprechenden Lösungsansätze. ()