Taktiken für Flexibilität und Änderbarkeit



* Klären Sie die Anforderungen an Änderbarkeit!
** Welche Funktionen oder Anwendungsfälle sind von Änderungen betroffen?
** Welche nichtfunktionalen Anforderungen (etwa: Mengen, Volumina, Benutzerzahlen) können sich ändern?
** Welche Parameter der (Betriebs-)Umgebung, Infrastruktur oder Umsysteme können sich ändern?

* Begrenzen Sie die Auswirkungen von Änderungen auf möglichst kleine Bereiche Ihrer Architektur.
* Verhindern Sie, dass Änderungen sich über weite Teile Ihres Systems (bzw. darüber hinaus) ausbreiten.
** Reduzieren Sie Abhängigkeiten
** Verwenden Sie Vermittler (Broker), statt Abhängigkeiten direkt in Ihren Code aufzunehmen. Vorsicht: Das kostet uU Performance.
** Generalisieren Sie Bausteine, statt sie zu spezialisieren.

* Verzögern Sie Festlegungen:
** Verlegen Sie Festlegungen von der Erstellungszeit (im Code) auf die Installations- oder sogar Laufzeit. Vorsicht: Diese Konfigurierterkeit erschwert in hohem Maße die Testbarkeit Ihres Systems.
** Registrierung und Instantiierung zur Laufzeit, etwa: Eclipse-Plugins, publish/subscribe Registrierung, Laufzeitkonfiguration,
** treffe Festlegungen zur Laufzeit (etwa: Konfigurationsdateien, Konfigurations-Server, Konfiguration durch Notifikation (etwa: publish/subscribe)
** Polymorphismus, spätes Binden von Methodenaufrufen
** Einhaltung definierter Protokolle ermöglicht Austausch von Komponenten zur Laufzeit



* Verbessern Sie die Prüf- oder Testbarkeit Ihres Systems
** Führen Sie automatische Tests ein - insbesondere an den Stellen der erwarteten Änderungen
** Testen Sie insbesondere die Schnittstellen der betroffenen Bausteine.


* Verbessern Sie die Verständlichkeit Ihres Systems
** Systematische Architekturdokumentation kann dabei helfen… aber das hatten Sie sicherlich schon befürchtet :-)
** Vereinfachen Sie, vereinfachen und vereinfachen. Immer wieder. Reduzieren Sie Komplexität, Abhängigkeiten. Vermeiden Sie Generizität und Sonderfälle. Verwenden Sie normale Lösungen und keine exotischen. Bevorzugen Sie bekannte Standards gegenüber (besonderen) eigenen Lösungen...