Domain Driven Design

Die Struktur des Backends folgt dem Domain Driven Design. Hierbei werden Zuständigkeiten klar auf unterschiedliche Layer verteilt und voneinander entkoppelt.

Der Domain Layer modelliert die Fachlichkeit der Applikation und deren Geschäftslogik. Klassen des Application Service Layers nutzen die Domain Klassen sowie die Repositories des Infrastructure Layers, die die Persistenz der Domain Objekte realisieren, um eine Fassade für alle Funktionen des Systems bereitzustellen.

../../_images/architecture-ddd.png

Vor allem bedeutend ist die vollständige Isolation der Persistenz aus Sicht des Domain Models. Auf diese Art und Weise ist die Geschäftslogik wiederverwendbar und von Infrastruktur und Applikation unabhängig. Durch die Application Facade in Form der Application Services ist der Web Layer leicht austausch- und erweiterbar.

Dir aktuelle Realsierung stellt die Funktionen über einen REST-Webservice zur Verfügung, eine JSF Anwendung könnte aber problemlos dieselben Services nutzen.

Siehe auch

DDD Refcard

Domain Model

Das Domain Model kann in mehrere voneinander unabhängige Bereiche (entsprechend den clientseitigen Modulen) unterteilt werden, dies ist durch die Paketstruktur des Projektes ersichtlich.

Appointment News, Termine, Events
Diet Mensaplan
Institution Vorlesungspläne, Personen und Funktionen

Der Mensaplan wird durch die Klassen Diet, Meal und Dish repräsentiert, die einen Speiseplan (eines Tages), ein Essen und ein Gericht modellieren.

../../_images/canteen.png

Termine, Events und News können mit einer einzigen Klassen (Appointment)abgebildet werden. Dies ist Konsistent mit der in Typo 3 vorliegenden Repräsentation der Datensätze.

../../_images/appointment.png

Das Modell, das den Vorlesungsplänen und Kontaktdaten zugrunde liegt unterscheidet zunächst zwischen Institutionen und Fakultäten, wobei eine Fakultät ebenfalls eine Institution ist. Eine Institution hat Funktionen, die von Personen erfüllt werden. Eine Fakultät hat darüber hinaus Studiengänge mit Vorlesungen die zu bestimmten Terminen stattfinden. Eine Vorlesung kann mit einem oder mehreren Personen assoziiert sein.

../../_images/institution.png

Diet, Meal,Dish und Appointment sind gewöhnliche POJOs, die restlichen Domain Klassen JPA Entities, da es nötig diese in der Datenbank des Webservice zwischenzuspeichern um unnötige und teure Anfragen an LSF zu vermeiden.