clean architecture - sdd conferencesddconf.com/brands/sdd/library/20170518_-_clean... · 2017. 5....
TRANSCRIPT
![Page 1: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/1.jpg)
Clean ArchitecturePatterns, Practices, and Principles
@matthewrenze
#sddconf
![Page 2: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/2.jpg)
![Page 3: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/3.jpg)
![Page 4: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/4.jpg)
![Page 5: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/5.jpg)
![Page 6: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/6.jpg)
![Page 7: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/7.jpg)
![Page 8: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/8.jpg)
About Me
Independent consultant
EducationB.S. in Computer Science (ISU)
B.A. in Philosophy (ISU)
CommunityPublic Speaker
Pluralsight Author
Microsoft MVP
ASPInsider
Open-Source Software
![Page 9: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/9.jpg)
Overview
1. Clean Architecture
2. Domain-Centric Architecture
3. Application Layer
4. Commands and Queries
5. Functional Organization
6. Microservices
![Page 10: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/10.jpg)
Focus
Enterprise Architecture
Line-of-Business Applications
Modern equivalent of 3-Layer
![Page 11: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/11.jpg)
Focus
Generally applicable
6 Key Points
Q & A
![Page 12: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/12.jpg)
What is Software Architecture?
High-level
Structure
Layers
Components
Relationships
Source: http://msdn.microsoft.com/
en-us/library/ff650706.aspx
![Page 13: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/13.jpg)
Levels of Architectural Abstraction
System
Sub-systems
Layers
Components
Classes
Data and Methods
![Page 14: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/14.jpg)
Levels of Architectural Abstraction
System
Sub-systems
Layers
Components
Classes
Data and Methods
![Page 15: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/15.jpg)
Messy vs Clean Architecture
![Page 16: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/16.jpg)
Messy vs Clean Architecture
![Page 17: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/17.jpg)
Messy vs Clean Architecture
![Page 18: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/18.jpg)
What Is Bad Architecture?
Complex
Inconsistent
Incoherent
Rigid
Brittle
Untestable
Unmaintainable
![Page 19: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/19.jpg)
What Is Clean Architecture?
Simple
Understandable
Flexible
Emergent
Testable
Maintainable
![Page 20: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/20.jpg)
What Is Clean Architecture?
Architecture that is designed for the inhabitants of the architecture… not for the architect… or the machine
![Page 21: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/21.jpg)
What Is Clean Architecture?
Architecture that is designed for the inhabitants of the architecture… not for the architect… or the machine
![Page 22: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/22.jpg)
What Is Clean Architecture?
Architecture that is designed for the inhabitants of the architecture… not for the architect… or the machine
![Page 23: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/23.jpg)
What Is Clean Architecture?
Architecture that is designed for the inhabitants of the architecture… not for the architect… or the machine
![Page 24: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/24.jpg)
What Is Clean Architecture?
Architecture that is designed for the inhabitants of the architecture… not for the architect… or the machine
![Page 25: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/25.jpg)
Why Is Clean Architecture Important?
Cost/benefit
Minimize cost to maintain
Maximize business value
![Page 26: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/26.jpg)
Decisions, Decisions, Decisions…
Context is king
All decisions are a tradeoff
Use your best judgement
![Page 27: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/27.jpg)
Domain-Centric Architecture
![Page 28: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/28.jpg)
Earth
Moon
Mercury
Venus
SunMars
SaturnJupiter
![Page 29: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/29.jpg)
Earth
Mercury
Venus Sun
SaturnJupiter
Mars
![Page 30: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/30.jpg)
Geocentric Model Heliocentric Model
Earth
Moon
Mercury
Venus
SunMars
SaturnJupiter
Earth
Mercury
Venus Sun
SaturnJupiter
Mars
![Page 31: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/31.jpg)
Classic 3-layer Database-centric Architecture
DatabaseDatabase
Data Access
Business Logic
UI
![Page 32: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/32.jpg)
Database- vs. Domain-centric Architecture
DatabaseDatabase
Data Access
Business Logic
UI
DatabaseDomain
Application
Presentation
Database
![Page 33: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/33.jpg)
“The first concern of the architect is to make sure that the house is
usable, it is not to ensure that the house is made of brick.”
– Uncle Bob
![Page 34: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/34.jpg)
Essential vs. Detail
Space is essential
Usability is essential
![Page 35: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/35.jpg)
Essential vs. Detail
Space is essential
Usability is essential
Building material is a detail
Ornamentation is a detail
![Page 36: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/36.jpg)
Essential vs. Detail
Domain is essential
Use cases are essential
![Page 37: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/37.jpg)
Essential vs. Detail
Domain is essential
Use cases are essential
Presentation is a detail
Persistence is a detail
![Page 38: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/38.jpg)
Database- vs. Domain-centric Architecture
DatabaseDatabase
Data Access
Business Logic
UI
DatabaseDomain
Application
Presentation
Database
![Page 39: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/39.jpg)
Hexagonal Architecture
Original source: http://alistair.cockburn.us/Hexagonal+architecture
Application
http
feed
GUI
http
adapter
app-to-app
adapter
test
adapter
mock
database
database
adapter
mock
telephone
adapter
answering
machine
adapter
app
DB
![Page 40: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/40.jpg)
Onion Architecture
Database
Application Services
User Interface
Domain
Model
Domain Services
Application Core
DB
web
service
file
Original source: http://jeffreypalermo.com/blog/the-onion-architecture-part-2/
![Page 41: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/41.jpg)
Database
Controllers
Entities
Use Cases
Original source: http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
External
Interfaces
PresenterUse case
output port
Use case
interactor
Use case
input portController
Flow
of
Control
I
I
Clean Architecture
![Page 42: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/42.jpg)
It’s All the Same Thing
Hexagonal Onion Clean
Original Source: http://blog.ploeh.dk/2013/12/03/layers-onions-ports-adapters-its-all-the-same/
![Page 43: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/43.jpg)
Why Use Domain-Centric Architecture?
ProsFocus on essential
Less coupling to details
Necessary for DDD
![Page 44: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/44.jpg)
Why Use Domain-Centric Architecture?
ProsFocus on essential
Less coupling to details
Necessary for DDD
ConsChange is difficult
Requires extra thought
Initial higher cost
![Page 45: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/45.jpg)
Application Layer
![Page 46: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/46.jpg)
What Are Layers?
Levels of abstraction
Single-Responsibility Principle
Developer roles / skills
Multiple implementations
Varying rates of change
![Page 47: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/47.jpg)
Classic 3-Layer Architecture
UI
Business Logic
Data Access
Database
Users
Dependency
![Page 48: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/48.jpg)
Modern 4-Layer Architecture
Presentation
Domain
Persistence
Users
Application
Infrastructure
OSDatabase
Cro
ss-Cuttin
g C
once
rns
Dependency
![Page 49: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/49.jpg)
Application Layer
Implements use cases
High-level application logic
Knows about domain
No knowledge of other layers
Contains interfaces for details
Presentation
Domain
Persistence
Users
Application
Infrastructure
OSDatabase
Cro
ss-Cuttin
g C
once
rns
Dependency
![Page 50: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/50.jpg)
Layer Dependencies
Dependency inversion
Inversion of control
Independent deployability
Flexibility and maintainability
Presentation
Domain
Persistence
Users
Application
Infrastructure
OSDatabase
Cro
ss-Cuttin
g C
once
rns
Flow of Control Dependency
![Page 51: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/51.jpg)
Users
OSDatabase
Composition
ImplementsDatabaseContext
IDatabaseContext
Sale
ICreateSaleCommand
CreateSaleCommand
SalesController
IInventoryClient
InventoryClient
Cro
ss-Cuttin
gC
once
rns
IDate
Service
Date
Service
Presentation
Application
Persistence
Domain
Infrastructure
![Page 52: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/52.jpg)
Why Use an Application Layer?
ProsFocus is on use cases
Easy to understand
Follows DIP
![Page 53: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/53.jpg)
Why Use an Application Layer?
ProsFocus is on use cases
Easy to understand
Follows DIP
ConsAdditional cost
Requires extra thought
IoC is counter-intuitive
![Page 54: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/54.jpg)
Commands and Queries
![Page 55: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/55.jpg)
Command-Query Separation
CommandDoes something
Should modify state
Should not return a value
![Page 56: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/56.jpg)
Command-Query Separation
CommandDoes something
Should modify state
Should not return a value
QueryAnswers a question
Should not modify state
Always returns a value
![Page 57: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/57.jpg)
Command-Query Separation
CommandDoes something
Should modify state
Should not return a value (ideally)
QueryAnswers a question
Should not modify state
Always returns a value
Avoid mixing the two!
![Page 58: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/58.jpg)
CQRS Architectures
Presentation
Domain
Persistence
Users
Queries
Database
Commands
Data Access
Data Flow
![Page 59: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/59.jpg)
CQRS Type 1 – Single Database
Presentation
Domain
Persistence
Users
Queries
Database
Commands
Data Access
Data Flow
![Page 60: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/60.jpg)
CQRS Type 2 – Read/Write Databases
Presentation
Domain
Persistence
Users
Queries
Write
Database
Commands
Data Access
Read
Database
Data Flow
![Page 61: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/61.jpg)
CQRS Type 3 – Event Sourcing
Presentation
Domain
Persistence
Users
Queries
Event
Store
Commands
Data Access
Read
Database
Data Flow
![Page 62: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/62.jpg)
CQRS Type 3 – Event Sourcing
Complete audit trail
Point-in-time reconstruction
Replay events
Rebuild production database
Presentation
Domain
Persistence
Users
Queries
Event
Store
Commands
Data Access
Read
Database
![Page 63: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/63.jpg)
Why Use CQRS?
ProsMore efficient design
Simpler within each stack
Optimized performance
![Page 64: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/64.jpg)
Why Use CQRS?
ProsMore efficient design
Simpler within each stack
Optimized performance
ConsInconsistent across stacks
Type 2 is more complex
Type 3 might be overkill
![Page 65: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/65.jpg)
Functional Organization
![Page 66: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/66.jpg)
“The architecture should screamthe intent of the system!”
– Uncle Bob
![Page 67: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/67.jpg)
Bed
roo
mBed
roo
m
Din
ing
Ro
om
Livi
ng
Ro
om
Kitch
en
Entr
y
Utilit
yBath
![Page 68: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/68.jpg)
Material Quantity Cost
Appliances 5 $5,000
Cabinets 10 $2,500
Doors 15 $750
Fixtures 12 $2,400
Floors 9 $4,000
Walls 20 $10,000
Windows 8 $2,500
![Page 69: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/69.jpg)
ControllersViews
Models
![Page 70: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/70.jpg)
ControllersViews
Models
vs
VendorsProducts
Customers
![Page 71: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/71.jpg)
Content
Controllers
Models
Scripts
Views
![Page 72: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/72.jpg)
vs
Content
Controllers
Models
Scripts
Views
Customers
Employees
Products
Sales
Vendors
![Page 73: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/73.jpg)
So what?
![Page 74: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/74.jpg)
![Page 75: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/75.jpg)
vs
![Page 76: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/76.jpg)
Why Use Functional Organization
ProsSpatial locality
Easy to navigate
Avoid vendor lock-in
![Page 77: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/77.jpg)
Why Use Functional Organization
ProsSpatial locality
Easy to navigate
Avoid vendor lock-in
ConsLose framework conventions
Lose automatic scaffolding
Categorical is easier at first
![Page 78: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/78.jpg)
Microservices
![Page 79: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/79.jpg)
Components
UI
Business
Data Access
Database
Users
Sales Support Inventory
Sales Support Inventory
Sales Support Inventory
![Page 80: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/80.jpg)
Problem Domain
SalesSales Opportunity
Contact
Sales Person
Product
Sales Territory
SupportSupport Ticket
Customer
Support Person
Product
Resolution
![Page 81: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/81.jpg)
Single Domain Model
Sales
Opportunity
Support
TicketProduct
Employee
Customer
Sales
TerritoryResolution
![Page 82: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/82.jpg)
SupportSales
Overlapping Contexts
Sales
Opportunity
Support
TicketProduct
Employee
Customer
Sales
TerritoryResolution
![Page 83: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/83.jpg)
SupportSales
Bounded Contexts
Sales
Opportunity
Support
TicketProduct
Contact
Sales
TerritoryResolution
Customer
Product
Support
PersonSales Person
![Page 84: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/84.jpg)
Microservice Architectures
Subdivide system
Bounded contexts
Small teams
Sales
Support
Inventory
Marketing HR
![Page 85: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/85.jpg)
Microservice Architectures
Independent
Similar to SOA
Sales
Support
Inventory
Marketing HR
![Page 86: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/86.jpg)
Why Use Microservices?
ProsLess cost for large domains
Smaller teams
Independence
![Page 87: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/87.jpg)
Why Use Microservices?
ProsLess cost for large domains
Smaller teams
Independence
ConsOnly for large domains
Higher up-front cost
Distributed system costs
![Page 88: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/88.jpg)
Code Demo
![Page 89: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/89.jpg)
Where to Go Next?
Martin Fowler
![Page 91: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/91.jpg)
Where to Go Next?
Eric Evans
![Page 92: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/92.jpg)
Where to Go Next?
Greg Young Udi Dahan
![Page 93: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/93.jpg)
Where to Go Next?
Articles
Courses
Presentations
Source Code
Videos
www.matthewrenze.com
![Page 94: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/94.jpg)
www.pluralsight.com/authors/matthew-renze
![Page 95: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/95.jpg)
Conclusion
![Page 96: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/96.jpg)
Summary
Focus on the inhabitants
![Page 97: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/97.jpg)
Summary
Focus on the inhabitants
Domain-centric Architecture
DatabaseDomain
Application
Presentation
![Page 98: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/98.jpg)
Summary
Focus on the inhabitants
Domain-centric Architecture
Application Layer
Presentation
Domain
Persistence
Users
Application
Infrastructure
OSDatabase
Cro
ss-Cuttin
g C
once
rns
![Page 99: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/99.jpg)
Summary
Focus on the inhabitants
Domain-centric Architecture
Application Layer
Commands and Queries
Presentation
Domain
Persistence
Users
Queries
Database
Commands
Data Access
![Page 100: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/100.jpg)
Summary
Focus on the inhabitants
Domain-centric Architecture
Application Layer
Commands and Queries
Functional CohesionVendorsProducts
Customers
![Page 101: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/101.jpg)
Summary
Focus on the inhabitants
Domain-centric Architecture
Application Layer
Commands and Queries
Functional Cohesion
Bounded Contexts
Sales
Support
Inventory
Marketing HR
![Page 102: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/102.jpg)
Feedback
Feedback is very important to me!
One thing you liked?
One thing I could improve?
![Page 103: Clean Architecture - SDD Conferencesddconf.com/brands/sdd/library/20170518_-_Clean... · 2017. 5. 5. · Why Use CQRS? Pros More efficient design Simpler within each stack Optimized](https://reader036.vdocument.in/reader036/viewer/2022071407/60fddcb49d0fe126096752e2/html5/thumbnails/103.jpg)
Contact Info
Matthew Renze
Data Science Consultant
Renze Consulting
Twitter: @matthewrenze
Email: [email protected]
Website: www.matthewrenze.com
Thank You! : )