Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und...

23
Einführung in Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014

Transcript of Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und...

Page 1: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Einführung inDomain-Driven Design

Jens Borrmann und Nicole Rauch22. Mai 2014

Page 2: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer
Page 3: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Unsere aktuelle Architektur

UserInterface

BusinessLayer

DatenbankLayer

Page 4: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Unsere aktuelle Architektur

UserInterface

BusinessLayer

DatenbankLayer

KundenEditUI

KundenEditModel

KundenBS

KundenDTO

KundenPS

KundenDAOKundenVO

Page 5: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Domain-Driven Design

I Domänen-Experten und Entwickler gemeinsam

I Fokus der Entwicklung auf die Fachlichkeit

I Bausteine und Werkzeuge für gute Anwendungen

Page 6: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Literatur

Page 7: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Baustein: Entität

I hat eine Identität (beschreibt das „wer“)

I hat einen Lebenszyklus

I Modellierung fokussiert darauf

I eindeutigen Identifikator festlegen

Page 8: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Baustein: Value Object

I Wert

I hat keine Identität (beschreibt „was“, nicht „wer“)

I fachlicher Wrapper um technische Datentypen

I bildet eine konzeptionelle Einheit

I kann oft als Immutable implementiert werdenI dann ist Sharing möglich

Page 9: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Einige Wochen später...

Page 10: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Neues über Value Objects

I aus Entitäten auslagern

I können auch komplexer aufgebaut sein

I entwickeln sich zu „Code-Magneten“

Page 11: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Die allgegenwärtige und gemeinsame Sprache

I Fachbegriffe überall verwenden, auch im Code!

I Glossar zur Begriffsklärung

I muss reichhaltig genug sein für sämtliche Kommunikation

I beschreibt nicht nur die Einheiten im System, sondernauch Aufgaben und Funktionalitäten

I muss widerspruchsfrei und eindeutig sein

Page 12: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Domain Services

I Hinweis auf fehlenden Service: Code in static Methoden

I zustandslos

I oft als Einstieg in die Domäne

Page 13: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer
Page 14: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Domain Services Revisited

I zu viel Code in ServicesI prozedurale ProgrammmierungI blutleeres Modell

I zu viel Code in EntitätenI Überfrachtung der Entitäten mit VerhaltenI Verlust konzeptioneller KlarheitI Abhängigkeiten an der falschen Stelle

Page 15: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Repositories

I fachliche Schnittstelle zu Daten

I gaukeln In-Memory-Collection vor

I keine Infrastruktur-Abhängigkeiten in Domain Code

Page 16: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Repositories

KundeDatabaseRepository

KundeService

KundeRepository Kunde

Business Layer

DB Layer

Page 17: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Repositories

DB-Adapter

HTTP

KundeService

KundeRepository

Kunde

KundeDatabaseRepository

RESTFilesystem

Page 18: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer
Page 19: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Gründe für Anpassungen am Modell

I Grund Nummer 1: Lernen

I bessere Begriffe

I Beziehungen werden klarer

I neue Konzepte/Abstraktionen tauchen auf

Page 20: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Und sie programmierten glücklich

bis an ihr Lebensende. . .

Page 21: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Achtung!

I Technisches nicht hinten runterfallen lassen

I Vorsicht vor blutleeren Modellen - Code in die Objekte!

I Services sollten die Ausnahme sein, nicht die Regel

I Klassische Schichtenarchitektur kann suboptimal sein

Page 22: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Positive Aspekte

I Fokus auf Fachlichkeit und gemeinsamer Sprache

I Gutes Zusammenspiel mit Specification by Example bzw.ATDD

I Value Objects entlasten Entitäten und ziehen Code an

I Keine Angst vor Veränderungen - Code geschmeidighalten

Page 23: Einführung in Domain-Driven Design - Entwicklertag · Domain-Driven Design Jens Borrmann und Nicole Rauch 22. Mai 2014. Unsere aktuelle Architektur User Interface Business Layer

Vielen Dank!

Folien auf GitHub:

https://github.com/NicoleRauch/DomainDrivenDesign

Jens Borrmann

E-Mail [email protected]

Twitter @jborrmann

Nicole Rauch

E-Mail [email protected]

Twitter @NicoleRauch