Hilfe! Ich habe eine Circular Dependency – was soll ich tun?!

Wie immer gilt erstmal: Keep Calm! Macht euch im ersten Schritt klar, warum genau ihr überhaupt eine Circular Dependency habt. Eure App wird wegen der Circular Dependency nicht kompiliert werden und Angular wird euch in den Terminal-Logs in Form einer Fehlermeldung zumindest oberflächlich sagen, welche Circular-Dependency vorliegt.

In der Form Modul A -> Modul B -> Modul A werdet ihr erfahren, welche Module betroffen sind und auf dieser Basis könnt ihr euren Lösungsweg fortsetzen.

In der Regel werden euch die Logs auch verraten, welche Bestandteile eines Moduls eine Circular Dependency verursachen.

Mit diesem Wissen könnt ihr die verursachenden Bestandteile genauer untersuchen. Dafür empfiehlt sich nochmal die Strategieliste von Teil 2 zur Hilfe zu nehmen: Schaut insbesondere, ob ihr gegen das Prinzip der klaren Zuständigkeiten verstoßen oder Zuständigkeiten vermischt habt. Geht es um einen Service, dann schaut ob er eine Funktion innerhalb eurer Software aufruft, statt nur Funktionen aus Third Party Modulen.

Dabei kann es auch sehr hilfreich sein, die Injections und Aufrufe auf einem Blatt Papier zu sammeln und entsprechend mit Pfeilen zu verbinden. Die Pfeilgraphen werden dann einen Kreis bilden (warum ist klar: Es heißt Circular). Diesen Kreis gilt es nun zu durchbrechen.

Wichtig an dieser Stelle: Es kann einfach erscheinen, eine betroffene Funktion einfach in ein neues Modul auszulagern oder eine zweite Funktion zu schreiben. Macht das auf keinen Fall! Ein solches Vorgehen bläht euren Code unnötig auf und verletzt in jedem Fall das DRY-Prinzip (Don’t repeat yourself). Einen solchen Pfusch am Bau sollten wir uns als Entwickler mit Stil nicht leisten.

Stattdessen sollten wir unbedingt den Weg des Refactorings einschlagen und uns ausreichend Gedanken dazu machen, wie umfangreich unser Refactoring ausfallen soll. Habt ihr nur an einer Stelle eine Zuständigkeit falsch vergeben, kann es ausreichend sein diesen kleinen Fehler zu korrigieren.

Merkt ihr beim untersuchen eurer Module hingegen, dass ihr gravierende Architektur-Fehler begangen habt und weitere Circular Dependencies bald zu erwarten sind, dann überarbeitet eure Architektur in einem umfangreichen Refactoring.

Konzipiert dafür zunächst eine überarbeitete Modul-Architektur und beachtet dabei die Strategien weiter oben. Überlegt euch genau, welche Zuständigkeiten eure Modul-Bestandteile haben sollten und wieso diese in eurer fehlerhaften Architektur eventuell unpassend sind. Erstellt euch Skizzen und Diagramme über eure Funktionen und Modul-Bestandteile – die UML ist dabei sicher ein hilfreiches Werkzeug.

Wenn ihr eine Architektur erarbeitet habt, die eurer Meinung nach in der Lage ist jetzt und zukünftig Circular Dependencies zu vermeiden, macht euch an das Refactoring der betroffenen Module. Um effizient zu arbeiten, müsst ihr diese meistens nicht komplett neu entwickeln. Versucht euren bereits entwickelten Code erneut zu verwenden und auf die Änderungen der neuen Architektur anzupassen.

Allgemein gilt:

  • Nehmt euch die Zeit, die nötig ist.
  • Geht sicher, dass ihr bei jedem Refactoring-Arbeitsschritt genau versteht warum ihr ihn erledigt und wie er helfen kann, zukünftig Circular Dependencies zu vermeiden.
  • Es ist immer hilfreich, die allgemeinen Regeln für gute Code Qualität zu beachten.

Zu Teil 1
Zu Teil 2

Schreibe einen Kommentar

Coding Kombüse Logo

Kontakt

Wendenstraße 130
20537 Hamburg, Germany
moin [at] coding-kombuese.de

Vernetze dich mit uns

Bleibe auf dem Laufenden

Wir informieren dich über die digitale Welt und sagen dir welche Trends du im Auge behalten solltest.

Cookie Hinweis von Real Cookie Banner