SlideShare a Scribd company logo
@mauroservienti | #EDDD
all our
aggregates
are wrong
Mauro Servienti
@mauroservienti
@mauroservienti | #EDDD
All I wanna do
when I wake up in
the morning is…
Rosanna, Toto. Toto IV
@mauroservienti | #EDDD
Buy a "Banana Protector"
@mauroservienti | #EDDD
Buy a "Banana Protector"
@mauroservienti | #EDDD
Sounds like a nice looking aggregate
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
@mauroservienti | #EDDD
It even has behaviors
@mauroservienti | #EDDD
please, welcome the
business
@mauroservienti | #EDDD
Business requirements (#1)
@mauroservienti | #EDDD
Straightforward, isn’t it?
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
- Item ID
- Price
Sales
@mauroservienti | #EDDD
Straightforward, isn’t it?
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
- Item ID
- Price
Sales
copy
@mauroservienti | #EDDD
Business requirements (#2)
@mauroservienti | #EDDD
Still not a big deal…
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
copy
- Item ID
- Inventory
Warehouse
copy
@mauroservienti | #EDDD
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
- Item ID
- Inventory
Warehouse
However, availability changes over time
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
copy
@mauroservienti | #EDDD
Business requirements (#3)
@mauroservienti | #EDDD
- Item ID
- Inventory
Warehouse
…uhm…
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- Quantity
- Inventory
- Name
- Description
Shopping Cart
@mauroservienti | #EDDD
- Item ID
- Inventory
Warehouse
…uhm…
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
Shopping Cart
@mauroservienti | #EDDD
- Item ID
- Inventory
Warehouse
…uhm…
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
Shopping Cart
Is item XYZ in a cart?
Swap & Insert Prices
@mauroservienti | #EDDD
- Item ID
- Inventory
Warehouse
…uhm…
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- Price
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
Shopping Cart
Is item XYZ in a cart?
Swap & Insert Prices
Move to Saved for…
@mauroservienti | #EDDD
- Item ID
- Inventory
Warehouse
It’s becoming messy, isn’t it?
- Item ID
- Price
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
Shopping Cart
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Update XYZ inventory
Is item XYZ in a cart?
Swap & Insert Prices
Move to Saved for…
Is item XYZ in a cart?
Swap & Insert Prices
Move to Saved for…
@mauroservienti | #EDDD
The big picture is even messier!
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
Shopping Cart
- Item ID
- Inventory
Warehouse
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
- Item ID
- Name
- Description
Marketing
copy
Is item XYZ in a cart?
Swap & Insert Prices
Move to Saved for…
@mauroservienti | #EDDD
…and messier!
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
- Estimated
Delivery
Shopping Cart
- Item ID
- Inventory
Warehouse
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
Is item XYZ in a cart?
Swap & Insert Prices
- Item ID
- Name
- Description
Marketing
copy
- Item ID
- Delivery
Type
Shipping
Is item XYZ in a cart?
Update XYZ delivery
Move to Saved for…
@mauroservienti | #EDDD
autonomy?
puff, it’s gone
@mauroservienti | #EDDD
Can we get rid of all this coupling?
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
- Inventory
- Name
- Description
- Estimated
Delivery
Shopping Cart
- Item ID
- Inventory
Warehouse
Is item XYZ in a cart?
Update XYZ inventory
- Item ID
- Price
Sales
- Item ID
- Name
- Description
Marketing
copy
- Item ID
- Delivery
Type
Shipping
Is item XYZ in a cart?
Update XYZ delivery
Is item XYZ in a cart?
Swap & Insert Prices
Move to Saved for…
@mauroservienti | #EDDD
shopping cart
doesn’t exist
@mauroservienti | #EDDD
Sales shopping cart
[ list-of ]
- Item ID
- Quantity
- Inventory
- Name
- Description
- Delivery Est.
Shopping Cart Warehouse
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
- Item ID
- Inventory
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
Warehouse shopping cart
[ list-of ]
- Item ID
- Quantity
- Name
- Description
- Delivery Est.
Shopping Cart
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
Shipping shopping cart
[ list-of ]
- Item ID
- Quantity
- Name
- Description
Shopping Cart
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
Marketing tends to be stable
[ list-of ]
- Item ID
- Quantity
Shopping Cart
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
Do we need the Shopping Cart at all?
[ list-of ]
- Item ID
- Quantity
Shopping Cart
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
Can Sales be responsible for that concept?
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
Cart ID
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
We followed the coupling
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
Cart ID
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
information
structure doesn’t fit users
@mauroservienti | #EDDD
Can Read/View Models be a solution?
Marketing Sales Shipping Warehouse others
ViewModel
Storage
Shopping Cart
@mauroservienti | #EDDD
that’s a
cache
@mauroservienti | #EDDD
We cannot cache everything
@mauroservienti | #EDDD
Shared identifiers
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
Cart ID
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
ViewModel Composition
/products/
Browser
1
@mauroservienti | #EDDD
ViewModel Composition
/products/
Marketing Sales Shipping Warehouse others
Browser
IDIDIDIDID
1
ViewModel
@mauroservienti | #EDDD
How can we build such a page?
@mauroservienti | #EDDD
Sales Product Requests Handler
@mauroservienti | #EDDD
Sales Request matching
@mauroservienti | #EDDD
Sales Composition
@mauroservienti | #EDDD
what
about
writes?
@mauroservienti | #EDDD
ViewModel Decomposition
[ list-of ]
- Cart ID
- Item ID
- Quantity
- Delivery Est.
- Item ID
- Price
- Item ID
- Name
- Description
Marketing
Sales
Cart ID
[ list-of ]
- Item ID
- CurrentPrice
- LastPrice
- Quantity
[ list-of ]
- Cart ID
- Item ID
- Inventory
- Quantity
Warehouse
- Item ID
- Inventory
- Item ID
- Delivery
Type
Shipping
@mauroservienti | #EDDD
ViewModel Decomposition
POST -> /shopping-cart/
Browser
{
ItemID
Quantity
}
@mauroservienti | #EDDD
ViewModel Decomposition
POST -> /shopping-cart/
Browser
Sales Shipping Warehouse
ID
Q.ty
ID
Q.ty
ID
Q.ty
{
ItemID
Quantity
}
@mauroservienti | #EDDD
Shipping Shopping Cart Requests Handler
@mauroservienti | #EDDD
Shipping Request Matching
@mauroservienti | #EDDD
Shipping Decomposition
@mauroservienti | #EDDD
things might
go wrong
@mauroservienti | #EDDD
Shipping Decomposition
@mauroservienti | #EDDD
Shipping Shopping Cart Requests Handler
@mauroservienti | #EDDD
Shipping Error Handling
@mauroservienti | #EDDD
Append Only Model
@mauroservienti | #EDDD
there is no such thing as orchestration
@mauroservienti | #EDDD
Full Vertical Slices
MarketingSales Warehouse Shipping
behavior & databehavior & data behavior & databehavior & data
ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
@mauroservienti | #EDDD
services need to
communicate
@mauroservienti | #EDDD
Business requirements (#4)
• Annoy Notify users of 1 week stale carts
• Wipe 1 month stale carts
@mauroservienti | #EDDD
Services communication channel
MarketingSales Warehouse Shipping
behavior & databehavior & data behavior & databehavior & data
ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
@mauroservienti | #EDDD
Services communication channel
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
@mauroservienti | #EDDD
Services communication channel
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
@mauroservienti | #EDDD
Services communication channel
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
@mauroservienti | #EDDD
1 week later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
Cart Got Stale
@mauroservienti | #EDDD
1 week later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
busCart Got Stale
@mauroservienti | #EDDD
1 week later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
bus Cart Got Stale
@mauroservienti | #EDDD
1 week later
MarketingSales Warehouse Shipping
behavior & data
behavior & data behavior & data
behavior & data
ViewModel Composition
ViewModel Composition ViewModel Composition
ViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
bus
Notify User
Cart Got Stale
@mauroservienti | #EDDD
1 month later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
bus
Cart Expired
@mauroservienti | #EDDD
busCart Expired
1 month later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
Cart Expired
@mauroservienti | #EDDD
1 month later
MarketingSales Warehouse Shipping
behavior & data
behavior & data
behavior & databehavior & data
ViewModel Composition
ViewModel Composition ViewModel CompositionViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
busCart Expired Cart Expired
@mauroservienti | #EDDD
1 month later
MarketingSales Warehouse Shipping
behavior & databehavior & data
behavior & data
behavior & data
ViewModel Composition ViewModel Composition ViewModel Composition
ViewModel Composition
Add Item to Cart
1. Set 1 week timeout
2. Set 1 month timeout
bus
Wipe cart Wipe cart
Cart Expired Cart Expired
@mauroservienti | #EDDD
cross services events
can be as thin as
event name and identifiers
@mauroservienti | #EDDD
bus
The final big picture
MarketingSales Warehouse Shipping
behavior & databehavior & data behavior & databehavior & data
UI Shell
ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
@mauroservienti | #EDDD
the 45’ tyranny
Demos
bit.ly/explore-ddd-demos
Udi Dahan talking about boundaries
go.particular.net/explore-ddd-boundaries
@mauroservienti | #EDDD
Takeaways
• Boundaries are key to success
• Do not bring in more technology to solve non-
technical problems
@mauroservienti | #EDDD
Takeaways
• Boundaries are key to success
• Mental model can badly influence design
• Users/Business analysts tend to think in term
of data presentation
@mauroservienti | #EDDD
Takeaways
• Boundaries are key to success
• Mental model can badly influence design
• Do not name things prematurely
• Premature names stick and drive data
aggregation
@mauroservienti | #EDDD
Takeaways
• Boundaries are key to success
• Mental model can badly influence design
• Do not name things prematurely
• Behaviors define how to aggregate data
• Group data that change together and that influence each
other
• Use anti-requirements techniques to validate data
grouping
• Follow the coupling
@mauroservienti | #EDDD
Takeaways
• Boundaries are key to success
• Mental model can badly influence design
• Do not name things prematurely
• Behaviors define how to aggregate data
• Use ViewModel composition to present data
• No need for complex projections and read
models
@mauroservienti | #EDDD
Thank you!
I’ll be around to answer your
questions the whole day

More Related Content

What's hot

Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
Araf Karsh Hamid
 
Application development framework
Application development frameworkApplication development framework
Application development framework
Eastern Software Systems
 
CS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKSCS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKS
Kathirvel Ayyaswamy
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
Edureka!
 
Mongo db workshop # 01
Mongo db workshop # 01Mongo db workshop # 01
Mongo db workshop # 01
FarhatParveen10
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
LeeFeigenbaum
 
Debunking some “RDF vs. Property Graph” Alternative Facts
Debunking some “RDF vs. Property Graph” Alternative FactsDebunking some “RDF vs. Property Graph” Alternative Facts
Debunking some “RDF vs. Property Graph” Alternative Facts
Neo4j
 
Introduction To RDF and RDFS
Introduction To RDF and RDFSIntroduction To RDF and RDFS
Introduction To RDF and RDFS
Nilesh Wagmare
 
Mobile Application Development MAD J2ME UNIT 2
Mobile Application Development  MAD J2ME UNIT 2Mobile Application Development  MAD J2ME UNIT 2
Mobile Application Development MAD J2ME UNIT 2
Pallepati Vasavi
 
Metasploit 5.0 for beginners 2nd edition
Metasploit 5.0 for beginners 2nd editionMetasploit 5.0 for beginners 2nd edition
Metasploit 5.0 for beginners 2nd edition
Paulo R
 
Unit 2 : Internet Address
Unit 2 : Internet AddressUnit 2 : Internet Address
Unit 2 : Internet Address
Chandan Gupta Bhagat
 
OWL and OBO
OWL and OBOOWL and OBO
OWL and OBO
Duncan Hull
 
GraphQL-ify your APIs
GraphQL-ify your APIsGraphQL-ify your APIs
GraphQL-ify your APIs
Soham Dasgupta
 
ESWC 2017 Tutorial Knowledge Graphs
ESWC 2017 Tutorial Knowledge GraphsESWC 2017 Tutorial Knowledge Graphs
ESWC 2017 Tutorial Knowledge Graphs
Peter Haase
 
Introduction to IoT Architectures and Protocols
Introduction to IoT Architectures and ProtocolsIntroduction to IoT Architectures and Protocols
Introduction to IoT Architectures and Protocols
Abdullah Alfadhly
 
Rdf data-model-and-storage
Rdf data-model-and-storageRdf data-model-and-storage
Rdf data-model-and-storage
灿辉 葛
 
IOT in SMART Cities
IOT in SMART CitiesIOT in SMART Cities
IOT in SMART Cities
Dr. Shivananda Koteshwar
 
Couch db
Couch dbCouch db
Couch db
Rashmi Agale
 
Resource description framework
Resource description frameworkResource description framework
Resource description framework
Stanley Wang
 
RDF and OWL
RDF and OWLRDF and OWL
RDF and OWL
Rachel Lovinger
 

What's hot (20)

Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Application development framework
Application development frameworkApplication development framework
Application development framework
 
CS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKSCS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKS
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
 
Mongo db workshop # 01
Mongo db workshop # 01Mongo db workshop # 01
Mongo db workshop # 01
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
 
Debunking some “RDF vs. Property Graph” Alternative Facts
Debunking some “RDF vs. Property Graph” Alternative FactsDebunking some “RDF vs. Property Graph” Alternative Facts
Debunking some “RDF vs. Property Graph” Alternative Facts
 
Introduction To RDF and RDFS
Introduction To RDF and RDFSIntroduction To RDF and RDFS
Introduction To RDF and RDFS
 
Mobile Application Development MAD J2ME UNIT 2
Mobile Application Development  MAD J2ME UNIT 2Mobile Application Development  MAD J2ME UNIT 2
Mobile Application Development MAD J2ME UNIT 2
 
Metasploit 5.0 for beginners 2nd edition
Metasploit 5.0 for beginners 2nd editionMetasploit 5.0 for beginners 2nd edition
Metasploit 5.0 for beginners 2nd edition
 
Unit 2 : Internet Address
Unit 2 : Internet AddressUnit 2 : Internet Address
Unit 2 : Internet Address
 
OWL and OBO
OWL and OBOOWL and OBO
OWL and OBO
 
GraphQL-ify your APIs
GraphQL-ify your APIsGraphQL-ify your APIs
GraphQL-ify your APIs
 
ESWC 2017 Tutorial Knowledge Graphs
ESWC 2017 Tutorial Knowledge GraphsESWC 2017 Tutorial Knowledge Graphs
ESWC 2017 Tutorial Knowledge Graphs
 
Introduction to IoT Architectures and Protocols
Introduction to IoT Architectures and ProtocolsIntroduction to IoT Architectures and Protocols
Introduction to IoT Architectures and Protocols
 
Rdf data-model-and-storage
Rdf data-model-and-storageRdf data-model-and-storage
Rdf data-model-and-storage
 
IOT in SMART Cities
IOT in SMART CitiesIOT in SMART Cities
IOT in SMART Cities
 
Couch db
Couch dbCouch db
Couch db
 
Resource description framework
Resource description frameworkResource description framework
Resource description framework
 
RDF and OWL
RDF and OWLRDF and OWL
RDF and OWL
 

More from Mauro Servienti

Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019
Mauro Servienti
 
Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019
Mauro Servienti
 
Welcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise ApplicationsWelcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise Applications
Mauro Servienti
 
All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019
Mauro Servienti
 
Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019
Mauro Servienti
 
Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...
Mauro Servienti
 
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Mauro Servienti
 
Living organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better ParmaLiving organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better Parma
Mauro Servienti
 
Welcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted SoftwareWelcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted Software
Mauro Servienti
 
PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018
Mauro Servienti
 
Design a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT BetterDesign a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT Better
Mauro Servienti
 
Microservices and pineapple on pizza what do they have in common - dos and ...
Microservices and pineapple on pizza   what do they have in common - dos and ...Microservices and pineapple on pizza   what do they have in common - dos and ...
Microservices and pineapple on pizza what do they have in common - dos and ...
Mauro Servienti
 
Designing a ui for microservices
Designing a ui for microservicesDesigning a ui for microservices
Designing a ui for microservices
Mauro Servienti
 
Po is dead, long live the po
Po is dead, long live the poPo is dead, long live the po
Po is dead, long live the po
Mauro Servienti
 
Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!
Mauro Servienti
 
GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?
Mauro Servienti
 
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
Dall'idea al deploy   un lungo viaggio che passa per git flow e semverDall'idea al deploy   un lungo viaggio che passa per git flow e semver
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
Mauro Servienti
 
Progettare una UI per i Microservices
Progettare una UI per i MicroservicesProgettare una UI per i Microservices
Progettare una UI per i Microservices
Mauro Servienti
 
The road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messagesThe road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messages
Mauro Servienti
 
La via verso SOA è lastricata di messaggi
La via verso SOA è lastricata di messaggiLa via verso SOA è lastricata di messaggi
La via verso SOA è lastricata di messaggi
Mauro Servienti
 

More from Mauro Servienti (20)

Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019
 
Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019
 
Welcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise ApplicationsWelcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise Applications
 
All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019
 
Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019
 
Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...
 
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
 
Living organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better ParmaLiving organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better Parma
 
Welcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted SoftwareWelcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted Software
 
PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018
 
Design a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT BetterDesign a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT Better
 
Microservices and pineapple on pizza what do they have in common - dos and ...
Microservices and pineapple on pizza   what do they have in common - dos and ...Microservices and pineapple on pizza   what do they have in common - dos and ...
Microservices and pineapple on pizza what do they have in common - dos and ...
 
Designing a ui for microservices
Designing a ui for microservicesDesigning a ui for microservices
Designing a ui for microservices
 
Po is dead, long live the po
Po is dead, long live the poPo is dead, long live the po
Po is dead, long live the po
 
Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!
 
GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?
 
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
Dall'idea al deploy   un lungo viaggio che passa per git flow e semverDall'idea al deploy   un lungo viaggio che passa per git flow e semver
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
 
Progettare una UI per i Microservices
Progettare una UI per i MicroservicesProgettare una UI per i Microservices
Progettare una UI per i Microservices
 
The road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messagesThe road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messages
 
La via verso SOA è lastricata di messaggi
La via verso SOA è lastricata di messaggiLa via verso SOA è lastricata di messaggi
La via verso SOA è lastricata di messaggi
 

Recently uploaded

May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Yara Milbes
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 

Recently uploaded (20)

May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 

All our aggregates are wrong (ExploreDDD 2018)

  • 1. @mauroservienti | #EDDD all our aggregates are wrong Mauro Servienti @mauroservienti
  • 2. @mauroservienti | #EDDD All I wanna do when I wake up in the morning is… Rosanna, Toto. Toto IV
  • 3. @mauroservienti | #EDDD Buy a "Banana Protector"
  • 4. @mauroservienti | #EDDD Buy a "Banana Protector"
  • 5. @mauroservienti | #EDDD Sounds like a nice looking aggregate [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart
  • 6. @mauroservienti | #EDDD It even has behaviors
  • 7. @mauroservienti | #EDDD please, welcome the business
  • 9. @mauroservienti | #EDDD Straightforward, isn’t it? [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart - Item ID - Price Sales
  • 10. @mauroservienti | #EDDD Straightforward, isn’t it? [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart - Item ID - Price Sales copy
  • 11. @mauroservienti | #EDDD Business requirements (#2)
  • 12. @mauroservienti | #EDDD Still not a big deal… - Item ID - Price Sales [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart copy - Item ID - Inventory Warehouse copy
  • 13. @mauroservienti | #EDDD - Item ID - Price Sales [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart - Item ID - Inventory Warehouse However, availability changes over time Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory copy
  • 14. @mauroservienti | #EDDD Business requirements (#3)
  • 15. @mauroservienti | #EDDD - Item ID - Inventory Warehouse …uhm… Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales [ list-of ] - Item ID - Price - Quantity - Inventory - Name - Description Shopping Cart
  • 16. @mauroservienti | #EDDD - Item ID - Inventory Warehouse …uhm… Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales [ list-of ] - Item ID - Price - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description Shopping Cart
  • 17. @mauroservienti | #EDDD - Item ID - Inventory Warehouse …uhm… Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales [ list-of ] - Item ID - Price - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description Shopping Cart Is item XYZ in a cart? Swap & Insert Prices
  • 18. @mauroservienti | #EDDD - Item ID - Inventory Warehouse …uhm… Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales [ list-of ] - Item ID - Price - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description Shopping Cart Is item XYZ in a cart? Swap & Insert Prices Move to Saved for…
  • 19. @mauroservienti | #EDDD - Item ID - Inventory Warehouse It’s becoming messy, isn’t it? - Item ID - Price Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description Shopping Cart Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Update XYZ inventory Is item XYZ in a cart? Swap & Insert Prices Move to Saved for… Is item XYZ in a cart? Swap & Insert Prices Move to Saved for…
  • 20. @mauroservienti | #EDDD The big picture is even messier! [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description Shopping Cart - Item ID - Inventory Warehouse Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales - Item ID - Name - Description Marketing copy Is item XYZ in a cart? Swap & Insert Prices Move to Saved for…
  • 21. @mauroservienti | #EDDD …and messier! [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description - Estimated Delivery Shopping Cart - Item ID - Inventory Warehouse Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales Is item XYZ in a cart? Swap & Insert Prices - Item ID - Name - Description Marketing copy - Item ID - Delivery Type Shipping Is item XYZ in a cart? Update XYZ delivery Move to Saved for…
  • 23. @mauroservienti | #EDDD Can we get rid of all this coupling? [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity - Inventory - Name - Description - Estimated Delivery Shopping Cart - Item ID - Inventory Warehouse Is item XYZ in a cart? Update XYZ inventory - Item ID - Price Sales - Item ID - Name - Description Marketing copy - Item ID - Delivery Type Shipping Is item XYZ in a cart? Update XYZ delivery Is item XYZ in a cart? Swap & Insert Prices Move to Saved for…
  • 24. @mauroservienti | #EDDD shopping cart doesn’t exist
  • 25. @mauroservienti | #EDDD Sales shopping cart [ list-of ] - Item ID - Quantity - Inventory - Name - Description - Delivery Est. Shopping Cart Warehouse - Item ID - Price - Item ID - Name - Description Marketing - Item ID - Inventory Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity - Item ID - Delivery Type Shipping
  • 26. @mauroservienti | #EDDD - Item ID - Price - Item ID - Name - Description Marketing Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity Warehouse shopping cart [ list-of ] - Item ID - Quantity - Name - Description - Delivery Est. Shopping Cart [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 27. @mauroservienti | #EDDD Shipping shopping cart [ list-of ] - Item ID - Quantity - Name - Description Shopping Cart [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 28. @mauroservienti | #EDDD Marketing tends to be stable [ list-of ] - Item ID - Quantity Shopping Cart [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 29. @mauroservienti | #EDDD Do we need the Shopping Cart at all? [ list-of ] - Item ID - Quantity Shopping Cart [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 30. @mauroservienti | #EDDD Can Sales be responsible for that concept? [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales Cart ID [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 31. @mauroservienti | #EDDD We followed the coupling [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales Cart ID [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 33. @mauroservienti | #EDDD Can Read/View Models be a solution? Marketing Sales Shipping Warehouse others ViewModel Storage Shopping Cart
  • 35. @mauroservienti | #EDDD We cannot cache everything
  • 36. @mauroservienti | #EDDD Shared identifiers [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales Cart ID [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 37. @mauroservienti | #EDDD ViewModel Composition /products/ Browser 1
  • 38. @mauroservienti | #EDDD ViewModel Composition /products/ Marketing Sales Shipping Warehouse others Browser IDIDIDIDID 1 ViewModel
  • 39. @mauroservienti | #EDDD How can we build such a page?
  • 40. @mauroservienti | #EDDD Sales Product Requests Handler
  • 41. @mauroservienti | #EDDD Sales Request matching
  • 44. @mauroservienti | #EDDD ViewModel Decomposition [ list-of ] - Cart ID - Item ID - Quantity - Delivery Est. - Item ID - Price - Item ID - Name - Description Marketing Sales Cart ID [ list-of ] - Item ID - CurrentPrice - LastPrice - Quantity [ list-of ] - Cart ID - Item ID - Inventory - Quantity Warehouse - Item ID - Inventory - Item ID - Delivery Type Shipping
  • 45. @mauroservienti | #EDDD ViewModel Decomposition POST -> /shopping-cart/ Browser { ItemID Quantity }
  • 46. @mauroservienti | #EDDD ViewModel Decomposition POST -> /shopping-cart/ Browser Sales Shipping Warehouse ID Q.ty ID Q.ty ID Q.ty { ItemID Quantity }
  • 47. @mauroservienti | #EDDD Shipping Shopping Cart Requests Handler
  • 52. @mauroservienti | #EDDD Shipping Shopping Cart Requests Handler
  • 55. @mauroservienti | #EDDD there is no such thing as orchestration
  • 56. @mauroservienti | #EDDD Full Vertical Slices MarketingSales Warehouse Shipping behavior & databehavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
  • 57. @mauroservienti | #EDDD services need to communicate
  • 58. @mauroservienti | #EDDD Business requirements (#4) • Annoy Notify users of 1 week stale carts • Wipe 1 month stale carts
  • 59. @mauroservienti | #EDDD Services communication channel MarketingSales Warehouse Shipping behavior & databehavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
  • 60. @mauroservienti | #EDDD Services communication channel MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart
  • 61. @mauroservienti | #EDDD Services communication channel MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout
  • 62. @mauroservienti | #EDDD Services communication channel MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout
  • 63. @mauroservienti | #EDDD 1 week later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout Cart Got Stale
  • 64. @mauroservienti | #EDDD 1 week later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout busCart Got Stale
  • 65. @mauroservienti | #EDDD 1 week later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout bus Cart Got Stale
  • 66. @mauroservienti | #EDDD 1 week later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & data behavior & data ViewModel Composition ViewModel Composition ViewModel Composition ViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout bus Notify User Cart Got Stale
  • 67. @mauroservienti | #EDDD 1 month later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout bus Cart Expired
  • 68. @mauroservienti | #EDDD busCart Expired 1 month later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout Cart Expired
  • 69. @mauroservienti | #EDDD 1 month later MarketingSales Warehouse Shipping behavior & data behavior & data behavior & databehavior & data ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout busCart Expired Cart Expired
  • 70. @mauroservienti | #EDDD 1 month later MarketingSales Warehouse Shipping behavior & databehavior & data behavior & data behavior & data ViewModel Composition ViewModel Composition ViewModel Composition ViewModel Composition Add Item to Cart 1. Set 1 week timeout 2. Set 1 month timeout bus Wipe cart Wipe cart Cart Expired Cart Expired
  • 71. @mauroservienti | #EDDD cross services events can be as thin as event name and identifiers
  • 72. @mauroservienti | #EDDD bus The final big picture MarketingSales Warehouse Shipping behavior & databehavior & data behavior & databehavior & data UI Shell ViewModel Composition ViewModel Composition ViewModel CompositionViewModel Composition
  • 73. @mauroservienti | #EDDD the 45’ tyranny Demos bit.ly/explore-ddd-demos Udi Dahan talking about boundaries go.particular.net/explore-ddd-boundaries
  • 74. @mauroservienti | #EDDD Takeaways • Boundaries are key to success • Do not bring in more technology to solve non- technical problems
  • 75. @mauroservienti | #EDDD Takeaways • Boundaries are key to success • Mental model can badly influence design • Users/Business analysts tend to think in term of data presentation
  • 76. @mauroservienti | #EDDD Takeaways • Boundaries are key to success • Mental model can badly influence design • Do not name things prematurely • Premature names stick and drive data aggregation
  • 77. @mauroservienti | #EDDD Takeaways • Boundaries are key to success • Mental model can badly influence design • Do not name things prematurely • Behaviors define how to aggregate data • Group data that change together and that influence each other • Use anti-requirements techniques to validate data grouping • Follow the coupling
  • 78. @mauroservienti | #EDDD Takeaways • Boundaries are key to success • Mental model can badly influence design • Do not name things prematurely • Behaviors define how to aggregate data • Use ViewModel composition to present data • No need for complex projections and read models
  • 79. @mauroservienti | #EDDD Thank you! I’ll be around to answer your questions the whole day

Editor's Notes

  1. I’m a remote worker We live in a small flat, thus I have a small office I enjoy going to the office by bike And I enjoy bananas for my breaks Bike riding and bananas in the backpack are not a great idea, so…
  2. How is this thing designed?
  3. I’m a remote worker I enjoy going to work by bike And I enjoy bananas as lunch breaks Bike riding and bananas in the backpack are not a great idea, so…
  4. Price cannot unexpectedly change while an item is in the cart
  5. Price cannot unexpectedly change while an item is in the cart
  6. we could have shipping that kicks in to define shipping policies, and so on.
  7. distributed monolith
  8. Distributed monolith
  9. The least amount of coupling
  10. Sales conceptually own the shopping car concept
  11. Sales conceptually own the shopping car concept
  12. Sales conceptually own the shopping car concept
  13. Sales conceptually own the shopping car concept
  14. Since we have very low, if not zero, coupling across services.