Agile development and domain driven design
-
Upload
jacopo-romei -
Category
Technology
-
view
4.380 -
download
0
description
Transcript of Agile development and domain driven design
Jacopo Romeihttp://www.sviluppoagile.it/
Agile development and Domain Driven Design
Jacopo Romei, http://www.sviluppoagile.it/
J
Ego sliding Jacopo Romei
PHP since 1999
IT CEO in the past
Freelance agile coach
http://www.sviluppoagile.it/
Jacopo Romei, http://www.sviluppoagile.it/
J
Agile development
A family of empirical methodologies
Jacopo Romei, http://www.sviluppoagile.it/
J
Agile Manifesto Individuals over tools
Working software over documentation
Customer collaboration over contract deals
Accept change over following plans
Jacopo Romei, http://www.sviluppoagile.it/
J
Domain
What does inspire our solutions?
Jacopo Romei, http://www.sviluppoagile.it/
J
Driven
Where do we find our solutions?
Jacopo Romei, http://www.sviluppoagile.it/
J
Design
What does provide us with solutions?
Jacopo Romei, http://www.sviluppoagile.it/
J
Design vs. Process Design principles
Messy reality
DDD is a way to cope with the mess
Agile Dev is a way to cope with the mess
Jacopo Romei, http://www.sviluppoagile.it/
J
Manouvrability
Agility means manouvrability
Jacopo Romei, http://www.sviluppoagile.it/
J
Shared values Courage
Respect
Jacopo Romei, http://www.sviluppoagile.it/
J
Shared values Courage
Respect
Simplicity
Simplicity is the art of maximizing the amount of work not done
Jacopo Romei, http://www.sviluppoagile.it/
J
Shared values Courage
Respect
Simplicity Communication Feedback
Jacopo Romei, http://www.sviluppoagile.it/
J
Shared values Courage
Respect
Simplicity Communication Feedback
Who
Which
How
Why
Jacopo Romei, http://www.sviluppoagile.it/
J
XP and good design Refactoring tries to avoid overengineering
Refactoring can develop underengineering
XP works best with good designers
DDD helps developers being good designers
Jacopo Romei, http://www.sviluppoagile.it/
J
Don't ossify, please
Supple, knowledgerich design
Jacopo Romei, http://www.sviluppoagile.it/
J
Orthogonality•Orthogonality is a system design property facilitating feasibility and compactness of complex designs.
• Orthogonality guarantees that modifying the technical effect produced by a component of a system neither creates nor propagates side effects to other components of the system.
•Emergent behavior of a system should be controlled strictly by formal definitions of its logic and not by side effects resulting from poor integratio
•Orthogonality reduces testing and development time
Jacopo Romei, http://www.sviluppoagile.it/
J
Shared required practices Iterative and incremental development
Close relationship with domain experts
Refactoring
Jacopo Romei, http://www.sviluppoagile.it/
J
UX & Agile
Methodology to write user stories
Jacopo Romei, http://www.sviluppoagile.it/
J
DDD & Agile
Methodology to (let emerge) design
Jacopo Romei, http://www.sviluppoagile.it/
J
Ubiquitous language
One jargon to rule them all
Jacopo Romei, http://www.sviluppoagile.it/
J
Ubiquitous language Model as backbone of language in
Code Diagrams Writings Speech
Jacopo Romei, http://www.sviluppoagile.it/
�
Ubiquitous language Refactor
Classes Methods Modules
Reflect Real world entities Confusion resolution in conversations Changes in language as changes in model
Jacopo Romei, http://www.sviluppoagile.it/
�
Example
Jacopo Romei, http://www.sviluppoagile.it/
J
Short example “If we give the Routing Service an origin,
destination and arrival time, it can look up the stops the cargo will have to make and well... stick them in the database”
“The origin, destination and so on... it all feeds into Routing Service and we get back an Itinerary that has everything we need it”
“A Routing Service finds an Itinerary that satisfies a Route Specification”
Jacopo Romei, http://www.sviluppoagile.it/
J
Documentation
Agile methodologies value working software over comprehensive documentation
Jacopo Romei, http://www.sviluppoagile.it/
�
UML is not enoughUML doesn't convoy the concepts behind a model
UML doesn't convoy what objects are meant to do
Jacopo Romei, http://www.sviluppoagile.it/
�
Ubiquitous documentationUML provides some documentation
Code provides some documentation
Ubiquitous language provides some documentation
Jacopo Romei, http://www.sviluppoagile.it/
J
Hands-on modelers
Everyone who writes code must feel responsible for the model.
Jacopo Romei, http://www.sviluppoagile.it/
J
Hands-on modelers
Everyone who writes code must feel responsible for the model.
Everyone contributing to the model must touch the code.
Jacopo Romei, http://www.sviluppoagile.it/
J
Hands-on modelers
Everyone who writes code must feel responsible for the model.
Everyone contributing to the model must touch the code.
That's a DDD team. That's an agile team.
Jacopo Romei, http://www.sviluppoagile.it/
J
Modeling paradigm
Object oriented programming is good to model the way we think about things. OO community
developed lots of critically meaningful concepts.
PHP community: WAKE UP!
Jacopo Romei, http://www.sviluppoagile.it/
J
Deadly divide Model can be absent (brrr...)
Model can be overdesigned
Model can be detached from the domain
Suspect correctness
Hard to maintain
Difficult to understand
Jacopo Romei, http://www.sviluppoagile.it/
J
Reflection
Software must reflect domain model
Jacopo Romei, http://www.sviluppoagile.it/
J
Ubiquity
Software must reflect ubiquitous language
Jacopo Romei, http://www.sviluppoagile.it/
J
Building blocks Layered architecture
Services
Entities
Value Objects
Factories
Aggregates
Repositories
Jacopo Romei, http://www.sviluppoagile.it/
J
Layers User interface
Smart UI vs. Model Driven Design
Jacopo Romei, http://www.sviluppoagile.it/
J
Layers User interface
Smart UI vs. Model Driven Design
Application
a.k.a. Controller
Jacopo Romei, http://www.sviluppoagile.it/
J
Layers User interface
Smart UI vs. Model Driven Design
Application
a.k.a. Controller
Domain/Model layer
Jacopo Romei, http://www.sviluppoagile.it/
J
Layers User interface
Smart UI vs. Model Driven Design
Application
a.k.a. Controller
Domain/Model layer Infrastructure
Jacopo Romei, http://www.sviluppoagile.it/
J
Frameworks
Free choice, but domain layer must be preserved.
Jacopo Romei, http://www.sviluppoagile.it/
J
The end, the beginning
No one said agile was easy.
No one said it was a standalone concept.
Jacopo Romei, http://www.sviluppoagile.it/
J
What's next
Agile Day 2009
Jacopo Romei, http://www.sviluppoagile.it/
J
Jacopo Romei
jacopo [at] sviluppoagile.it
skype: jacoporomei
www.sviluppoagile.it