© GreenFlash/Shutterstock.com
Teil 1: Domänenschnitt mit Nx Monorepos

Der perfekte Projektstart mit Angular


Nx Monorepos erlauben das Aufteilen großer Projekte in einzelne Domänen und Bibliotheken. Zugriffsregeln und öffentliche APIs stellen eine lose Kopplung sicher. Der erste Teil dieser Artikelserie stellt vor, wie das relativ einfach zum Projektstart eingerichtet werden kann.

Mit Lösungen wie Angular lassen sich recht schnell moderne Clients für Geschäftsanwendungen schreiben. Doch sind die auch langfristig wartbar? Genau darauf kommt es nämlich bei vielen Projekten im Unternehmensumfeld an. Ein Produktlebenszyklus, der sich über zehn bis zwanzig Jahre erstreckt, ist keine Seltenheit.

Genau darum dreht sich die dreiteilige Serie, die mit diesem Artikel startet. Dabei möchte ich meine Erfahrungen, die sich seit der Betaphase von Angular angesammelt haben, teilen und zeigen, wie sich mit einem guten Projektstart eine solide Basis für solch ein Vorhaben bereitstellen lässt. Dazu verwende ich eine Fallstudie, deren Quellcode man unter [1] findet.

Domänenschnitt

Es ist kein Geheimnis, dass eine zu starke Verknüpfung einzelner Programmteile zu einer schlecht wartbaren Architektur führt. Wenn alles von allem abhängig ist, führt jede Änderung tendenziell zu Breaking Changes. Eine mögliche Lösung, die u. a. durch DDD [2] bekannt wurde, ist das Schneiden nach Domänen.

Vereinfacht formuliert sollen nach fachlichen Kriterien einzelne Bereiche, die voneinander möglichst wenig wissen müssen, identifiziert werden. Diese Domänen werden nun voneinander unabhängig modelliert, Verweise zwischen Domänen sind zu vermeiden.

In der hier verwendeten Fallstudie, die sich um Flugbuchungen dreht, lassen sich beispielsweise die in Abbildung 1 dargestellten Domänen identifizieren.

steyer_angular_start1_1.tif_fmt1.jpgAbb. 1: Domänen in unserer Fallstudie

Nun stellt sich natürlich die Frage, wie sich diese Domänen in einem Angular-Projekt abbilden lassen. Als einfache Optionen bieten sich Ordner oder Angular-Module (NgModules) an. Leider sind diese Konzepte zu wenig in sich geschlossen und erlauben Zugriffe, die nach und nach zu einer ungewollten Kopplung führen. Besser ist der Einsatz von Bibliotheken. Der nächste Abschnitt zeigt, wie sich ein Monorepo dazu nutzen lässt.

Monorepos und Domänen

Simpel ausgedrückt, ist ein Monorepo einfach eine Projektstruktur, die verschiedene zusammengehörige Anwendungen und Bibliotheken beherbergt (Abb. 2).

steyer_angular_start1_2.tif_fmt1.jpgAbb. 2: Einfaches Monorepo

Große Firmen wie Google, Facebook oder Microsoft setzen sehr stark auf diesen Ansatz. Er bringt gleich mehrere Vorteile:

  • Ein großes System lässt sich in mehrere kleine Anwendungen und Bibliotheken aufteilen.

  • Die einzelnen Bibliotheken müssen nicht versioniert werden: Die aktuellste Version befindet sich immer im Master Branch.

  • Das Verteilen von Bibliotheken ist einfach: Es gilt lediglich, den Quellcode einzuchecken.

  • Es gibt keine Versionskonflikte, da jede Bibliothek dieselben Abhängigkeiten nutzt.

  • Es kommen immer die neuesten Versionen der einzelnen Bibliotheken zum Einsatz. Dieser Umstand ist häufig bei großen Systemen, die in kleine Teile geteilt werden, wünschenswert. Im Umkehrschluss bedeutet das auch, dass keine alten Versionen gepflegt werden müssen.

  • Konflikte werden beim Refactoring rasch erkannt.

  • Die Bibliotheken lassen sich weiterhin in versionierter Form für andere Projekte via npm bereitstellen.

Natürlich bringen Monorepos auch ein paar Herausforderungen mit sich. Diese lassen sich auf organisatorischer sowie technischer Ebene lösen:

  • Für neue Versionen gibt es zunächst eigene Branches, und neue Features werden...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang