Slide 1

Slide 1 text

@TomHombergs https://reflectoring.io Get Your Hands Dirty on Clean Architecture

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

@TomHombergs https://reflectoring.io Layers

Slide 4

Slide 4 text

@TomHombergs https://reflectoring.io Why bother with architecture?

Slide 5

Slide 5 text

@TomHombergs https://reflectoring.io Architecture Goals

Slide 6

Slide 6 text

@TomHombergs https://reflectoring.io Architecture Goals

Slide 7

Slide 7 text

@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

Slide 10

Slide 10 text

@TomHombergs https://reflectoring.io Layers Promote Database-Driven Design

Slide 11

Slide 11 text

@TomHombergs https://reflectoring.io Layers Promote Hard-to-test Shortcuts

Slide 12

Slide 12 text

@TomHombergs https://reflectoring.io Layers Promote Hidden Functionality

Slide 13

Slide 13 text

@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

Slide 16

Slide 16 text

@TomHombergs https://reflectoring.io Dependency Inversion Principle

Slide 17

Slide 17 text

@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!

Slide 28

Slide 28 text

@TomHombergs https://reflectoring.io Hexagonal Architecture / Ports & Adapters (Alistair Cockburn)

Slide 29

Slide 29 text

@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!