Domain Driven Design in Angular
In dem Buch Domain Driven Design von Eric Evans gibt es 2 größere Kapitel, Tactical Deisgn
und Strategic Design
.
Bei Tactical Deisgn
geht es im großen ganzen um Design Patterns und Design Practices und bei Strategic Design
geht es um Decomposing a System.
Strategic Design
ist hier der wichtige Part.
Die Idee ist es, alles in einzelne UseCases/Domains aufzuteilen. In nx
kann das sehr einfach über Bibliotheken abgebildet werden. Jede Domain bekommt dafür in dem lib Ordner, einen eigenen Ordner, in dem die layer des UseCases leben.
Innerhalb eines UseCases gibt es dann die Features. Diese beinhalten Smarte Components. In dem Layer darunter sind die UI Bibliotheken mit Dump Components. Eine Ebene weiter darunter liegt die Domain Logik. Am Ende kommen noch einmal ein paar Util dinge.
Jeder dieser Blöcke ist dabei eine eigene Bibliothek.
Ein UseCase kann nur auf seine eigenen Bibliotheken zugreifen, sowie die aus shared. Und die Zugriffsrichtung ist immer von oben nach unten. Eine Ausnahme sind API
Bibliotheken. Hier werden einzelne Teile für andere UseCases freigegeben. Wenn möglich, sollte das aber vermieden werden.
Meistens landen die Dump Components dann in der Shared lib, sowie die Utils.
So eine Domain Lib sieht dabei in etwa so aus und besteht aus den 3 Layern Application
, Domain
und Infrastructure
. Application
grundsätzlich gut, da Information hiding --> Hier könnte noch eine Änderung der NGXS Nutzung eine Rolle spielen.
Vorteile dieser Architektur:
- Strikte Zugriffs Regelungen in nx
- Es ist schnell klar, wo was zu finden ist.
- Affected Test / Builds sind noch besser
Wer jetzt denkt "Oh boi, viele Bibliotheken die ich da erstellen muss...": Nein, dafür gibt es @angular-architects/ddd.
Eine Implementierung kann man hier finden: https://github.com/adrian-goe/bachelorarbeit-demo
Standort Hannover
newcubator GmbH
Bödekerstraße 22
30161 Hannover
Standort Dortmund
newcubator GmbH
Westenhellweg 85-89
44137 Dortmund