SlideShare una empresa de Scribd logo
1 de 90
Descargar para leer sin conexión
JakubPilimon
pilo_dev
pilloPl
DOMAIN-DRIVEN DESIGN
THEORY VS PRACTICE
NO UPFRONT DEFINISIONS
DOMAIN-DRIVEN DESIGN?
DDD?
CLEAN CODE?
CLEAN ARCHITECTURE?
CLEAN MODEL?
WHAT IS A MODEL?
INFORMATION GATHERING
MODULARIZATION
EVENT STORMING
EVENT
EVENT EVENT EVENT
PIVOTAL EVENTS
WHAT IS „A DOCUMENT”?
A RICH OBJECT
AN ANEMIC OBJECT
A COMPRESSED DATA
BOUNDED CONTEXT
WHAT IS „A POLICY”?
PIVOTAL EVENTS
OTHER HEURISTICS
LANGUAGE
DEPARTAMENTS
SINGLE SOURCE OF TRUTH
GENERIC AND CORE
PROBLEMS
WHAT KIND OF CODE IS INA
BOUNDED CONTEXT?
WHAT IS AN AGGREGATE?
UNDERSTAND DIFFERENT
TYPES OF LOGIC
„Can’t spend more money
than you have”
AGGREGATE
COMMAND
CONSISTENCY
„After charging a payer, an
external legacy system must
be informed (unless it is
Friday)”
AGGREGATE
APPLICATION
SERVICE
INTEGRATION/APPLICATION
EXTERNAL
SYSTEM
„ISBN must be correct”
VALIDATION
COMMAND
API
„Order forms are grouped
into packages”
ASK QUESTION: „WHAT DOES IT
CHANGE?”
ORDER
ADDED TO
PACKAGE
ORDER
REMOVED TO
PACKAGE
SO WHAT? WHAT
HAS HAPPENED?
PRESENTATION LOGIC
READ MODEL
ASK QUESTION: „WHAT DOES IT
CHANGE?”
ORDER
ADDED TO
PACKAGE
ORDER
REMOVED TO
PACKAGE
ASSISTANT
(ASSIGNED TO
THE PACKAGE)
NOW HAS
PERMISSION TO
ALL THE FORMS
PERMISSION
TO FORMS
GRANTED
SLICING A PROCESS DOES
NOT ALWAYS WORK
E-Scooter riders place reservations.
Reservation contains a particular e-scooter’s id,
rider’s id and it’s valid for a speci
fi
c amount of time.
There can be only one reservation for a particular
e-scooter at any given point of time.
New reservations are active by default. They can
expire or be canceled.
E-Scooters must be maintained (for instance -
battery replacement)
E-scooters that are put into maintenance mode
can’t be reserved.
E-scooters which are reserved can’t be put into
maintenance mode
Sometimes we predict high demand for e-
scooters in particular zones (areas).
They are delivered to the zone and can’t be
reserved by riders until speci
fi
c time (can’t be
put into maintenance mode either)
We can’t use scooter for a demand if it is
reserved or currently in maintenance.
E-SCOOTER
SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DEMAND
(requested?)
E-SCOOTER
SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
E-SCOOTER
SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
Block
Block
Block
DEMAND
SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
Blocked
Change description
POOR SCALABILITY
OR INCONSISTENCY
POOR TESTABILITY
COGNITIVE LOAD
DISPLAY
READY TO
RIDE
E-SCOOTERS
MAP SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
PROBLEMATIC TEAM
DEPENDENCIES
HOW MANY TEAMS GET A
TASK TO DELIVER THAT
STORY?
MAP SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
DRY
(LOGIC, NOT CODE!)
COUPLING
MAP SERVICE
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
E-SCOOTER
SERVICE
LOGICAL COUPLING
E-SCOOTER
SERVICE isAvailable?
RESERVATION
(placed?)
E-SCOOTER
(under
maintenance?)
DE
DEMAND
(requested?)
Availability Model
E-SCOOTER
SERVICE
Implementation
detail
Implementation
detail
DE
Implementation
detail
OBSERVABLE
BEHAVIOR
E-SCOOTER
SERVICE
Implementation
detail
Implementation
detail
DE
Implementation
detail
OBSERVABLE
BEHAVIOR
MAP SERVICE
COUPLING TO
OBSERVABLE BEHAVIORS
COUPLING TO
IMPLEMENTATION DETAILS
CONTENT COUPLING
INFORMATION HIDING
HOW TO NOTICE IT IN
YOUR PROJECT?
ASK QUESTION: „WHAT DOES IT
CHANGE?”
RESERVATION
COMPLETED
E-SCOOTER
PUT INTO
MAINTAINEN
ACE MODE
DEMAND
REQUESTED
STATUS IN DB
CHANGED
THERE IS
RESERVATION
RECORD
ASK QUESTION: „WHAT DOES IT
CHANGE?”
RESERVATION
COMPLETED
E-SCOOTER
PUT INTO
MAINTAINEN
ACE MODE
DEMAND
REQUESTED
E-SCOOTER
UNAVAILABLE
ASK QUESTION: „WHAT ELSE CAN
HAVE THE SAME RESULT?”
RESERVATION
COMPLETED
E-SCOOTER
UNAVAILABLE
„DON’T COMPLICATE!”
„COMPLICATION” LEADS
TO PROPER
ABSTRACTIONS
E-SCOOTER
SERVICE
Implementation
detail - reason
Implementation
detail - reason
DE
Implementation
detail - reason
OBSERVABLE
BEHAVIOR
MAP SERVICE
RESERVATION
AND RIDING
MAINTENANCE DE
DEMAND
FORECAST
AVAILABILITY
UNDERSTAND UPSTREAM
VS DOWNSTREAM
SINGLE SOURCE OF
TRUTH
LOCATION
AVAILABILITY
Is it available? Where is it?
Take/release
Register
position
COHESION
NOT JUST LOGICAL
COHESION
Location Availability
E-Scooter E-Scooter
position takenTill
LOCATION
AVAILABILITY
DEMAND
REQUESTED
DEMAND
CANCELED
RESERVATION
COMPLETED
RESERVATION
CANCELED
RESERVATION
EXPIRED
PUT INTO
MAINTAINENC
E MODE
LOCATION
AVAILABILITY
SCOOTER
TAKEN/
RELEASED
DEMAND
…
RESERV
ATION…
UNDERSTAND PUBLISHED
VS PUBLIC
BE LIBERAL INSIDE,
STRICT ON THE OUTSIDE
E-Scooter riders place reservations.
Reservation contains a particular e-scooter’s id,
rider’s id and it’s valid for a speci
fi
c amount of time.
There can be only one reservation for a particular
e-scooter at any given point of time.
New reservations are active by default. They can
expire or be canceled.
WHAT IS A
„RESERVATION?”
RESERVATION
COMPLETED
E-SCOOTER
UNAVAILABLE
E-SCOOTER RESERVATION
JUST A CONSEQUENCE
DECISION EFFECT OF THE DECISION
AGGREGATE READ MODEL
FIND REAL CONCEPTS/
ABSTRACTIONS
OFTENTIMES USER
STORIES ARE JUST FULL
OF UI CONCEPTS
USER STORIES ARE JUST
THE BEGINNING OF A
CONVERSATION
JakubPilimon
pilo_dev
pilloPl
DOMAIN-DRIVEN DESIGN
THEORY VS PRACTICE

Más contenido relacionado

Similar a SpringOne Tour: Domain-Driven Design: Theory vs Practice

Kakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming app
Neil Avery
 

Similar a SpringOne Tour: Domain-Driven Design: Theory vs Practice (20)

Kakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming app
 
Problems you’ll face in the Microservices World: Configuration, Authenticatio...
Problems you’ll face in the Microservices World: Configuration, Authenticatio...Problems you’ll face in the Microservices World: Configuration, Authenticatio...
Problems you’ll face in the Microservices World: Configuration, Authenticatio...
 
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenGrokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
 
Herding Microservices – the Atlassian Way
Herding Microservices – the Atlassian WayHerding Microservices – the Atlassian Way
Herding Microservices – the Atlassian Way
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero Downtime
 
XebiCon'17 : Monolith to microservice, histoire d’une transformation centrée...
XebiCon'17 : Monolith to microservice, histoire d’une transformation centrée...XebiCon'17 : Monolith to microservice, histoire d’une transformation centrée...
XebiCon'17 : Monolith to microservice, histoire d’une transformation centrée...
 
Lost in transaction - Strategies to deal with (in)consistency in distributed ...
Lost in transaction - Strategies to deal with (in)consistency in distributed ...Lost in transaction - Strategies to deal with (in)consistency in distributed ...
Lost in transaction - Strategies to deal with (in)consistency in distributed ...
 
Domain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDDDomain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDD
 
Exponential-e | Cloud Revolution Seminar at the Ritz, 20th November 2014
Exponential-e | Cloud Revolution Seminar at the Ritz, 20th November 2014Exponential-e | Cloud Revolution Seminar at the Ritz, 20th November 2014
Exponential-e | Cloud Revolution Seminar at the Ritz, 20th November 2014
 
DDD Europe 2019: Lost in transaction
DDD Europe 2019: Lost in transactionDDD Europe 2019: Lost in transaction
DDD Europe 2019: Lost in transaction
 
The Road To Event-Driven Architecture
The Road To Event-Driven ArchitectureThe Road To Event-Driven Architecture
The Road To Event-Driven Architecture
 
(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture Patterns(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture Patterns
 
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
 
[Practical] Functional Programming in Rails
[Practical] Functional Programming in Rails[Practical] Functional Programming in Rails
[Practical] Functional Programming in Rails
 
Cloudify your applications: microservices and beyond
Cloudify your applications: microservices and beyondCloudify your applications: microservices and beyond
Cloudify your applications: microservices and beyond
 
HERE Mobility SDK Tutorial
HERE Mobility SDK TutorialHERE Mobility SDK Tutorial
HERE Mobility SDK Tutorial
 
Hong Kong User Group 2019
Hong Kong User Group 2019Hong Kong User Group 2019
Hong Kong User Group 2019
 
Portal apps (slt)
Portal apps (slt)Portal apps (slt)
Portal apps (slt)
 
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
 
Event Driven Streaming Analytics - Demostration on Architecture of IoT
Event Driven Streaming Analytics - Demostration on Architecture of IoTEvent Driven Streaming Analytics - Demostration on Architecture of IoT
Event Driven Streaming Analytics - Demostration on Architecture of IoT
 

Más de VMware Tanzu

Más de VMware Tanzu (20)

What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
 
SpringOne Tour: Doing Progressive Delivery with your Team
SpringOne Tour: Doing Progressive Delivery with your TeamSpringOne Tour: Doing Progressive Delivery with your Team
SpringOne Tour: Doing Progressive Delivery with your Team
 

Último

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Último (20)

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

SpringOne Tour: Domain-Driven Design: Theory vs Practice