Great technologies, programming languages and tools are used when building software. That is good and right. But unfortunately, it is often lost sight of the fact that the decisive factor is not the technology, but the *business domain*. If we do not map the domain language and the business processes in the software, then it will not help our users in their work. No technology in the world can protect us from this.
In this talk, I'll show you how you can identify problems in an existing legacy system that could be solved with Domain-Driven Design. We will see problems such as: large entities that are used all over the system, how we could divide them into smaller entities according to the business domain and how we should cut the source code into bounded contexts. All this will be done with many examples from analysis tools that help us to see the system on the level above the source code.
its all about the domain, honey! Experiences from 15 years of Domain-Driven Design
1. WPS - Workplace Solutions GmbH //// Hans-Henny-Jahnn-Weg 29 //// 22085 HAMBURG
It’s all about the domain, honey !
Experiences from 15 years of Domain-Driven Design
Dr. Carola Lilienthal @cairolali cl@wps.de
16. @cairolali
▪ 15 years of development
▪ 3 Million LOC in Java
▪ 463 tangled classes from 10 modules
▪ This cycle contains 500.000 LOC
BIG BALL OF MUD ON CLASS LEVEL
17. @cairolali
▪ 20 years of developement
▪ 10 Million Lines of Code in Java
▪ 90 Modules
▪ No dependency control!
BIG BALL OF MUD ON MODULE LEVEL
18. @cairolali
▪ Within a module:
▪ high cohesion = strong coupling
▪ Single Responsibility Principle
▪ Separation of concern
▪ Outside a module:
▪ loose coupling = low coupling
▪ Information hiding
▪ Separation of concern
HIGH COHESION AND LOOSE COUPLING
19. @cairolali
HIGH COHERSION AND LOW COUPLING FOR MODUES
Loose coupling = As little coupling as possible!
Technical
Layering
Module B
Module A Module C
User Interface User Interface
User Interface
Domain
Application
Domain
Application
Domain
Application
20. @cairolali
THE NEED OF DOMAIN ARCHITECTURE
An architecture (with or without
microservices) only then has
high cohesion and low coupling
if it follows a
domain architecture!
21. @cairolali
ONE DOMAIN MODEL AND DATABASE FOR ALL
Module B
Module A Module C
User Interface User Interface
User Interface
Domain
Application Application Application
25. @cairolali
MODELS IN MICROSERVICES
➔ domains need to be divided into subdomains with smaller models
▪ Separate models
▪ Allow independent changes (separation of concern)
▪ have to represent a smaller
set of the requirements (high cohesion)
▪ Need a clear boarder (loose coupling)
➔ Each model and its subdomain should be small enough to be programmed by one team.
26.
27. @cairolali
STRATEGIC DESIGN
▪ Find the subdomains in the
domain and decompose your
software accordingly.
▪ Set explicit boundaries with
the bounded contexts for
▪ domain-oriented parts in
the software and
▪ in the team organization
▪ Goal: high cohesion
+ loose coupling
Domain Software System
Bounded
Context A
Bounded
Context B
Team A
Team B
Bounded
Context C
Team C
Subdomain
A
Subdomain
B
Subdomain
C
30. @cairolali
TICKET AGENT
CUSTOMER
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
7
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
31. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
CUSTOMER
7
32. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
once a week
CUSTOMER
7
33. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
once a week
each time a
customer asks
for a ticket
CUSTOMER
7
34. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
once a week
each time a
customer asks
for a ticket
Cinema management
Ticket sales
CUSTOMER
7
35. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
once a week
each time a
customer asks
for a ticket
Cinema management
Ticket sales
information flow
CUSTOMER
7
36. @cairolali
TICKET AGENT
WEEKLY SCHEDULE
<< work in progress >>
REQUESTED NUMBER
OF SEATS
AUDITORIUM PLAN
LIST OF AUDITORIUM
PLANS
SOLD SEATS
TICKETS
FILM SHOW
FOUND
SEATS
AUDITORIUM PLAN
WEEKLY SCHEDULE
<< finalized >>
FILM DISTRIBUTOR
CINEMA
MANAGER
AD
AGENCY ADVERTISMENT
BOOKING PLAN
PLAN FOR
FILM SHOWS
COUNTRYWIDE
NUMBER OF VISITORS
AVAILABILITY
OF FILMS
1
6
2
10
5
3
8
4
9
11
12
13
14
AUDITORIUM PLAN
15
STARTS
WORKING ON
CHECKS THE
NEGOTIATES
WITH
FINALIZES
THE
AND CREATES FOR
THE UPCOMMING
WEEK
MONEY TICKETS
TICKETS
ASKS FOR
FOR A
OPENS A
CLOSES THE
FROM THE
OFFERS
TO GIVES
TO
SEARCHES
ON
THE
ON
THE
MARKS
PRINTS
GIVES THE
TO
THE
Trigger
Trigger
once a week
each time a
customer asks
for a ticket
Cinema management
Ticket sales
information flow
WEEKLY SCHEDULE
<< printed >>
CUSTOMER
7
37. @cairolali
WeeklyPlanningService
•PlanFilmInHall
•AdPlanningForFilm
•ExpectedNumVisitors
•GenerateFinalSchedule
TicketSaleService
•SearchTimeForFilm
•SearchSeatsInHall
•BookSeats
•SellPlaces
UI WeeklyPlanning UI TicketSales UI WeeklyPlanning UI TicketSales
WeeklyScheduleService
•SearchTimeForFilm
•PlanFilmInHall
•AdPlanningForFilm
•ExpectedNumVisitors
•GenerateFinalSchedule
AuditoriumPlanService
•SearchSeatsInHall
•BookSeats
•SellPlaces
•GeneratePlans
Bounded Context
Cinema Management
Bounded Context
TicketSales
Service Weekly Schedule Service Auditorium Plans
Service
Tickets
Division according to entities
with direct coupling
Bounded contexts according to business
processes with "asynchronous" coupling
WeeklySchedule WeeklySchedule
WeeklySchedule
WeeklySchedule
Auditorium Plans Auditorium Plans
AuditoriumPlans
Auditorium Plans
Ticket
Ticket
38. @cairolali
HOW DO I CUT MY LEGACY TO FIT THE DOMAIN?
▪ According to boundaries in the business process described by the domain experts
▪ Information flow
▪ Process rhythms
▪ Process triggers
▪ According to differences in the
use/definition of key concepts in the domain
▪ By departments in the organization or
groups of domain experts
39. @cairolali
612.869 LOC
14.756.435 LOC
252.062 LOC
804.093 LOC
543.388 LOC
1.035.668 LOC
486.358 LOC
175.258 LOC
42.311 LOC
193.383 LOC
643.466 LOC
245.754 LOC
2.890.204 LOC
141.696 LOC
512.086 LOC
9.988.363 LOC
200.591 LOC
922.949 LOC
22.658 LOC
663.862 LOC
3.270.188 LOC
1.521.357 LOC
0
2
4
6
8
10
MODULARITY MATURITY INDEX (MMI)