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 purpose of the project is:
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 10, 2010!!! Yes, there are new Updates... I want to declare that NDDD Sample application(s) is released. In the release are fixed all known bugs and issues. We have added Azure support. Cloud version of the application is based on Azure emulated environment provided by the SDK, so it hasn’t been tested on ‘real’ Azure scenario (we just do not have access to it). Any reviews, ideas and feedback are welcome! here is more info about the release
!!!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
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/