@TomHombergs https://reflectoring.io
The Ultimate Goal of Architecture
The goal of software
architecture is to
minimize the lifetime
cost of the software
Slide 8
Slide 8 text
@TomHombergs https://reflectoring.io
So ...
what‘s
wrong
with layers?
Slide 9
Slide 9 text
@TomHombergs https://reflectoring.io
Disclaimer
Layers are a solid
architecture pattern!
But without additional
restrictions they tend to
erode
@TomHombergs https://reflectoring.io
Do
circles
instead!
Slide 14
Slide 14 text
@TomHombergs https://reflectoring.io
SOLID Principles
S
O
L
I
D
Single Responsibility Principle
Open-Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
Slide 15
Slide 15 text
@TomHombergs https://reflectoring.io
Dependency Inversion Principle
SOLID Principles
S
O
L
I
D
Single Responsibility Principle
Open-Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
@TomHombergs https://reflectoring.io
Dependency Inversion Principle
We can choose the
direction of any code
dependency*
* As long as we have control over the code
Slide 18
Slide 18 text
@TomHombergs https://reflectoring.io
Clean Architecture (Robert C. Martin)
Slide 19
Slide 19 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle
Dependency Inversion Principle
SOLID Principles
S
O
L
I
D
Open-Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Slide 20
Slide 20 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle
Slide 21
Slide 21 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle
A module* should have
only one reason to change
* or class, package, component, architecture element, software entity, …
Slide 22
Slide 22 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle – Micro Level
Slide 23
Slide 23 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle – Micro Level
Slide 24
Slide 24 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle – Macro Level
Slide 25
Slide 25 text
@TomHombergs https://reflectoring.io
Single Responsibility Principle – Macro Level
Slide 26
Slide 26 text
@TomHombergs https://reflectoring.io
Domain-Driven Design
Only a
domain-centric architecture
allows
Domain-Driven Design
Slide 27
Slide 27 text
@TomHombergs https://reflectoring.io
Or do
hexagons
instead!
@TomHombergs https://reflectoring.io
Choose your Polygonal Style
Slide 30
Slide 30 text
@TomHombergs https://reflectoring.io
Quiz: What does this Application do?
Slide 31
Slide 31 text
@TomHombergs https://reflectoring.io
Quiz: What does this Application do?
Slide 32
Slide 32 text
@TomHombergs https://reflectoring.io
Let‘s get
our hands
dirty!
Code Example: https://github.com/thombergs/buckpal
Slide 33
Slide 33 text
@TomHombergs https://reflectoring.io
Conclusion
Slide 34
Slide 34 text
@TomHombergs https://reflectoring.io
Benefits of a Domain-Centric Architecture
Slide 35
Slide 35 text
@TomHombergs https://reflectoring.io
Drawbacks of a Domain-Centric Architecture
Slide 36
Slide 36 text
@TomHombergs https://reflectoring.io
Thank you for your Patience
…if you promise to post a review on
Amazon :)
https://speakerdeck.com/thombergs/2019
Slides!
https://reflectoring.io/javatalks
Free ebook! Pretty Book Covers!