160 likes | 326 Views
Introduction to Domain Driven Design. Ganesh Subramanian 22/12/2010 http://sysin.wordpress.com http://dynamicquerygen.sourceforge.net. Problem. Problem. Diverse Characters to solve one problem Everybody talks in different language
E N D
Introduction toDomain Driven Design Ganesh Subramanian 22/12/2010 http://sysin.wordpress.com http://dynamicquerygen.sourceforge.net
Problem • Diverse Characters to solve one problem • Everybody talks in different language • Ultimate Result- Delivered solution is brittle and Fragile
Solution • Everybody who are involved should talk in one Language • Step 1 : Agree on language terminology and definitions • Step 2: Call on the language expert • Step 3 : Use Business model to device the language
Domain Driven Design What is DDD? • Not a technology or a methodology • A way of thinking and a set of priorities, aimed at accelerating software projects that have to deal with complicated domains • Primary focus on the domain and domain logic • Complex domain designs based on a model.
Traditional Architecture Presentation Layer Infrastructure Layer Business Layer Data Access Layer
Layered Architecture (contd…) • User Interface • Responsible for showing information to the user and interpreting the user's commands • Application • Does not contain business rules or knowledge • Coordinates tasks and delegates work to domain objects • Does not have state reflecting the business situation • Interacts with application layer of other systems • Domain • Contains business logic and rules • Reflects the state of business situation • Heart of business software • Infrastructure • Provides generic technical capabilities that support the higher layers • Persistence, Sending Emails, libraries, utilities etc…
DDD in Practice Shopping Cart Application
Building Blocks Revisited • Entity • A noun with an identity • Mutable - State can change over time • Can be associated with other entities and value objects • Can’t be shared • Value Object • A noun without an identity • Immutable - State can’t change • Can be associated with other entities • Can be shared • Aggregate • One root entity per aggregate • Associated entities can refer to root but not other entities in the aggregate • All operations are done through root
Building Blocks Revisited (Contd…) • Service • Has operations that conceptually doesn’t below to an domain object • Stateless • Interface is defined in terms of other elements of the domain model • A service can be part of any layer (Application, Domain, Infrastructure) • Factory • Creates the entities and value objects • Use only when the entity creation is complex • Repository • Collection of entities • Takes care of updating an entity • Takes care of retrieving an already persisted entity • One repository per aggregate root
Questions ???