View
1.210
Download
1
Category
Tags:
Preview:
DESCRIPTION
Domain-driven design is a collaborative process involving both domain experts and software practitioners that attempts to address issues of complexity in software. This process is described in the book Domain-Driven Design written by Eric Evans. Domain-driven design starts with the assertion that complexity is in the domain, not in the technology. Accordingly, we must let technology play a supporting role. A person practicing domain-driven design does not attempt to model reality. Instead, domain experts and software practitioners use a mental model as a tool for solving problems within a given domain. The domain experts and software practitioners collaborate to explore and develop this model. We will look at the concept of a bounded context within which models can be isolated and explored. We will talk about domain-driven design's building block patterns including entities, value objects, aggregates, repositories, services, and domain events. We will see how test-driven development can be used as a means of exploring the model.
Citation preview
Domain-Driven DesignA Collaboration Between
Domain Experts and Software Practitioners
The Book
http://domaindrivendesign.org/books/evans_2003
Training
http://www.domainlanguage.com/
do·main\dōˈmān\ n.a sphere of knowledge, in#uence, or activity
"domain." Merriam-Webster.com. 2011. http://www.merriam-webster.com/dictionary/domain (17 October 2011).
Complexity is in the domain, not the technology
Case Study: Election Reporting
Elections and referendums are not as similar as they at $rst appear
Election winners may be determined by plurality and/or winning threshold
Referendums can only be passed by meeting a winning threshold
Elections vs. Referendums
Town Meeting Day (March) elections are very different than statewide elections (November)
During statewide elections, voters may be voting in both local and statewide elections at the same time—each with different district boundaries
District boundaries dictate reporting needs—statewide elections need to be reported one way, local elections another
Local vs. Statewide Elections
DistrictsSome districts may contain only part of a municipality or ward
The Chittenden-3-6 Vermont Representative District contains all of Winooski and part of Burlington’s Ward 1
Citizens in this part of Burlington’s Ward 1 vote in Winooski for statewide elections and in Burlington for local elections
Audience expects both aggregate and detailed reporting
Redistricting can occur between elections
Let technology play a supporting role
Models are tools used to solve domain problems
Ames RoomUsed in The Lord Of The Rings: The Fellowship of the Ring to make the hobbits appear the correct size in relation to Gandalf
We are always using mental models to understand the world around us—we do not perceive an objective reality
By Alex Valavanis (own work) [public domain], via Wikimedia Commons
"Why I prefer Fahrenheit to Celsius [Fixed]." reddit. 2012. http://www.reddit.com/r/funny/comments/wigk1/why_i_prefer_fahrenheit_to_celsius_$xed/ (16 September 2012).
Collaboratively explore the model with both domain experts and software practitioners
Case Study: Three-Dimensional Animation
Studied physics and computer science
Made many notable computer graphics discoveries
Eventually moved from two-dimensional to three-dimensional animation
Hired by Lucas$lm to bring his expertise to the entertainment $eld
Software Practioner: Edwin Catmull
Domain Expert: John LasseterStudied animation and taught by veteran animators from Disney
Realized early-on the potential for computer generated imagery
Worked at, but eventually $red from, Disney
Hired by Edwin Catmull at Lucas$lm as an “Interface Designer” because Catmull’s job didn’t include hiring animators[1]
1. Buckley, A. M. "Chapter 3: Art Meets Science." Pixar: The Company and Its Founders. Edina, MN: ABDO, 2011. 27. Print.
“Throughout the process, Lasseter worked side-by-side with the computer scientists. Lasseter’s requests pushed them to develop new tools, and their feedback helped him learn the digital animation process.”[1]
1. Buckley, A. M. "Chapter 3: Art Meets Science." Pixar: The Company and Its Founders. Edina, MN: ABDO, 2011. 30. Print.
Identify your core domain
Identify your core domain
Distill your core domain
Focus your resources on the core domain
Core Domain
Collaboratively explore domain models
A model is an abstract set of tools that is used to solve problems within a domain
While represented in code, do not think of the model as just code
A “real world model” is a fool’s errand
The model must be explored collaboratively with domain experts and software practitioners
The Model
“The map is not the territory.” —Alfred Korzybski
Magritte, René. The Treachery of Images (La trahision des images). 1929. Oil on canvas. Los Angeles County Museum of Art, Los Angeles, California.
This is not a pipe.
Magritte, René. The Treachery of Images (La trahision des images). 1929. Oil on canvas. Los Angeles County Museum of Art, Los Angeles, California.
"Everything simple is false. Everything which is complex is unusable." —Paul Valéry
There are always multiple models
Delineates the applicability of a particular model
Bounded contexts allow each model to be explored in isolation
Clearly de$ne:• Who is responsible for each bounded context• To which parts of the application is the bounded
context applicable• What manifestations the bounded context will take
(code, database schemas, etc.)
Document the interactions between bounded contexts with a context map
Bounded Context
Ubiquitous LanguageSpeak a ubiquitous language within a bounded context
Terms must be clearly de$ned, unambiguous, and consistent
Critically important when communicating between domain experts and software practitioners
The ubiquitous language will (and must) evolve as a progressively richer understanding of the domain and the model are achieved
If the ubiquitous language cannot be used to clearly express complex ideas, then you have more work to do!
Exploring the Model
Ask a domain expert to tell you a story (the scenario)
Propose a model
Code the scenario using unit tests
Repeat
A Model Exploration Process
Use concrete scenarios in discussions with domain experts and in unit tests
Building Blocks
De$ned by a thread of continuity and identity
Only responsibilities should be around identity and life cycle
May be composed of other entities and/or value objects
Entity
Value ObjectDe$ned by its encapsulated attributes
Treat value objects as immutable
Delegate business logic to value objects
De$ning an object as an entity or a value object is context-dependent
A group of related entities and value objects
Useful when de$ning transaction, distribution and concurrency boundaries
A model will likely have multiple aggregates
Aggregate
Aggregate RootDesignate one entity as the aggregate root
Allow external references to only the aggregate root
Use unidirectional references within an aggregate root for less complexity• Example: Reference a line item’s order, or an order’s line items,
but not both
Maintain references on the “many” side of a “one-to-many” relationships for less complexity:• Example: Reference a line item’s order, rather than an order’s
line items
RepositoryDelegate persistence of an aggregate root to a repository
A repository should behave as if it were an in-memory data store
If using an object-relational mapper (ORM): Database -> ORM -> Repository
Use an in-memory strategy for unit tests
Straddles persistence and domain layers, allowing you to stay focused on the domain model
ServiceA place for operations that aren’t naturally part of any domain object
Like value objects, services should be immutable
Operations on services are stateless
Command-Query Responsibility Segregation (CQRS)
Commands are responsible for changing state
Queries are responsible for retrieving state
A commands may delegate the actual state change to a domain event
Commands & Queries
Write Model/Read ModelDe$ne one model for writing data (commands)
De$ne another model for reading data (queries)
Both models will likely share aggregate root entity identi$ers
Event Sourcing[1]
1. http://martinfowler.com/eaaDev/EventSourcing.html
Domain EventSomething important that happens within the domain that may lead to a state change in a domain object
Domain events can trigger other domain events (e.g. three strikes triggers an out)
Domain events are immutable
Typically stored in an event log
Event LogCurrent state can be computed by reading the event log
Retroactive events can be used to “$x” application state
Current state may be cached, if necessary for performance
Can also serve as an audit log
Supple Design
Have a method on a value object that returns an instance of the same type of value object
Any method arguments should also be the same type as the value object
Example: 2 + 3 = 5• “2” is a value object of type integer• integer has an add method• add method accepts an argument of type integer• add method returns an integer• integers are closed under the operation of addition
Closure of Operations
Other TechniquesIntention-revealing interfaces
Side-effect free functions
Assertions
Strategic Design
Draw a context map of the current bounded contexts
Map what actually exists—not what you wish existed!
Identify relationships between contexts
Context Map
customer/supplier
Relationship Patterns
partnership
shared kernelbig ball of
mud
conformist
anticorruption layer
separate ways
open host service
published language
Distillation
A model my represent:• your core domain• a supporting domain• a generic subdomain
Focus your modeling efforts on the core domain
Consider outsourcing work on supporting domains
Consider off-the-shelf software for generic subdomains
Types of Domains
Identifying the Core DomainAsk organizational leaders and domain experts:• What keeps you awake at night?• What makes your system worth writing?• Why not buy it off the shelf?• Why not outsource it?
Don’t settle on not having access to a domain expert!
http://oreilly.com/catalog/9781449303129/ http://oreilly.com/catalog/9781449303433/
Thank You@BradleyHolt
http://bradley-holt.com
Copyright © 2011-2012 Bradley Holt. All rights reserved.
Recommended