Domain-Driven Design(DDD) is a complex and broad topic which is full of patterns and practices that are very well described in Eric Evan’s book. However even if you read it and understand all described there very well(i'd say which is not an easy task), the book could leave a lot of unanswered questions from practical perspective (e.g. how those things work in practice). This is because the book is technology - agnostic. That can’t happen for advanced developers with strong background. For most of us reading theory without seeing a practical part of the things is very boring and even could lead to unacceptable confusions.
Good DDD samples are very hard to find, that is not because they don’t exist but because real DDD power is discovered in complex domains. Mostly all DDD projects with complex domains are commercial projects. So one of the targets of the project is to demonstrate a practical implementation of the building block patterns described in the Eric Evans book based on a real but simplified cargo domain (which is also used as example in Eric Evans’ book).
The project is based on a joint effort by Eric Evans' company Domain Language and the Swedish software consulting company Citerus.
The purpose of the project is:
-To show practical side of DDD using .net framework
- To port Domain-Driven Design Sample from Java to C#
- Incrementally adjust the code and apply .net conventions and practices
- Use latest .net tools, technologies and software development methodologies that are widely used and discussed within alt.net group
- To provide an "how-to" example for implementing a typical DDD application
- To show a decent way to do it(but not the way to do it). Eventually, the same design could be re-implemented on various popular platforms, to give the same assistance to people working on those platforms,and also help those who must transition between the platforms.
- To support discussion of implementation practices. Variations could show trade-offs of alternative approaches, helping the community to clarify and refine best practices for building DDD applications.
As intended side-effect of the project which is especially important for .net community is to show alternative way of application architecture through practical application sample. Sadly but true is that mainstream within .net community still believes in DataSets and N-Layer\Tier architectures with Anemic Domain Model, Big Design Up Front, etc… and is unaware or\and doesn’t believe in TDD, Evolutionary Design and Development, and other Agile practices. So, in the project we will try to cover alt.net practices as much as possible.
We are open to discuss any aspects that could increase quality of the sample for sake of sharing with community.
For those who are new in DDD here is my post that could help to enter into the topic.
!!!UPDATE - Dec 11, 2009!!! Here we are... the port is very close to finish and there are some important updates: 1. added Register App and Web Services for the App along with Folder Import Scanner, 2. SVN folder restructure and are added corresponding solution files in order to makeup separate organization\team development of Register App as it is in original ndddSample, 3. added Controllers layer Unit Tests, 4. and finally and most 'important' we have a brand new glamorous logo! thanks to Cornel Cretu.
Next steps before release celebration are: 1. add readme with some explanations how to run, ect... 2. and maybe build scripts if they will be helpful. 3. Fix funny menu display in FireFox !!!UPDATE - Nov 12, 2009!!! Small updates, removed temporary Routing Service implementation and replaced with 'real' one :), as result new WCF host is added for that purpose NDDDSample.Interfaces.PathfinderRemoteService.Host. And of course ExternalRoutingService Tests are added to follow TDD approach :), to enable the tests was introduced Moq as mocking framework. !!!UPDATE - Nov 05, 2009!!! Finally I found the strengths to improve UI design of the site. Also is added simple error handling management on the MVC UI layer and WCF services sides. Next main target and focus will be Incident Logging application. !!!UPDATE - Aug 11, 2009!!!
For the moment the NDDD Sample is a workable DDD example based on Asp.net MVC which is UI part that is on top of domain model. Domain model is used by the Asp.net MVC:
1. In the same process –domain model is used by the MVC controllers, accessing application services directly
2. External process – domain model logic is exposed by WCF services. In this case WCF service access remote facade and DTOs exposed by WCF services.
User Interface is workable but is not nice, is hard for me to find strengths to develop nice pages :)
So, Public Cargo Tracking interface and administration of Booking and Routing interface are DONE. Next: to develop WPF application that will allow registering handlings.
Current Technology stack:
1. NHibernate and Sql Lite
2. Windsor Container
3. Windsor WCF Facility
4. WCF of course
5. Asp.NET MVC
enjoy :). I would like to mention contributors; even most of the code for the moment was committed by me that doesn’t mean I’m the only contributor, so Ruslan Rusu, Eugen Gorgan and Victor Lungu spend their free time to discuss .NET specific decisions and Eugen Navitaniuc who helps with Java related questions.
Quick link to the source: http://ndddsample.googlecode.com/svn/trunk/