22.9.2021

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.

bachelor-07

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.

bachelor-08

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.

bachelor-09

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

https://www.youtube.com/watch?v=4Ee96X6W3Nc&t=1480s

Adrian

Softwareentwickler

Zur Übersicht

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund