|
|||||||||||||||||||
|
The base desire of domain driven design is that when we develop software to support a working process, at the heart of the development activity we want to code directly for the objects and the logic of the supported process. A very useful series of distinctions has emerged from the experience of developing software by following the supported domain, and we have taken them as the stated purpose of domainmodel. The implementation of domainmodel follows Martin Fowler's magnificent Patterns of Enterprise Application Architecture. It was created entirely by refactoring from real Python applications.
Purpose of the ProductFollowing the 'ubiquitous language' for domain modeling set out by Eric Evans in his marvelous Domain Driven Design, we are able to identify the following core stories (expanded below).
Isolate a Domain LayerWe want our domain model to inhabit a layered architecture, with user interfaces and other clients above, and with a persistence layer below. We want to isolate the model.
Object Relational Mapper IndependenceWe want to code directly for the objects and the logic of the supported process in the language of the supported domain, rather than perhaps in the language of mapping software objects to relational database tables. Ultimately, of course, it's turtles all the way down. :-) At least from the standpoint of the model of a domain, it shouldn't make much difference what the expression of that model rests upon.
Presentation Interface IndependenceAn interface provides access to the resource it presents. The resource is shared by all the interfaces which present it. Therefore, we want to code directly for the objects and the logic of the supported process, and separate these concerns from any interface. In other words, we want to separate support for the working process from support for interacting with such support.
Dependence on Development ProcessThere's always a process, however it's constituted. And there are ways of developing support for working processes other than by carefully following the supported domain. But the agile and domain driven approaches appear to be the most common, in that their names seem to circulate most. Therefore, we want to code for the logic and in the language of the supported domain, and we want to layer this over the common language of agile and domain driven development.
Express Domain Model in SoftwareModules, entities, value objects, services.
Establish Life Cycle of Domain ObjectAggregates, factories, repositories.
Partition Domain into Bounded ContextsBounded context, continuous integration, context map.
Determine Co-operation Between ContextsShared kernel, customer/supplier development, conformist, anti-corruption layer, separate ways.
Make Each Bounded Context ApproachableOpen service, published language.
Intensify and Refine the ModelCore domain, domain vision statement, highlighted core, cohesive mechanisms, declarative style, segregated core, abstract core, generic sub-domains.
Introduce Elements of Larger Scale StructureResponsibility layers, knowledge level, pluggable component framework.
Scope of the WorkThe work of developing a domain model includes the following stories.
Scope of the SystemThe domainmodel system currently provides features which satisfy the following requirements.
|
||||||||||||||||||
|
Home : Features : Community : Documentation : Download : About Us
©2008 Appropriate Software Foundation. All rights reserved. Site last produced on Thu Aug 28 18:42:23 BST 2008 HTML : : CSS |
|||||||||||||||||||