[UPDATED - April 2017] - IMPORTANT: For up-to-date architecture and development guidance using .NET (i.e. .NET Core, ASP.NET Core, Docker containers, etc.) including Domain-Driven Design patterns, microservices architectures and other .NET related technologies like Xamarin for mobile apps check this landing page pointing to multiple NEW guides and reference applications:
Specifically, most of the DDD (Domain-Driven Design) patterns explained in the guidance written in 2010/2011 are still valid nowadays, however all the technologies have evolved significantly. Also, many new architecture patterns like Microservices Architecture (which is deriving from Domain-Driven Design) have been polished and improved over the years.
- For an up-to-date guide/eBook on Microservices/Containers Architecture with .NET Core, check this:
- For an up-to-date reference application on Microservices/Containers Architecture with .NET Core, check this:
The CODEPLEX site was unpublished since it was a non-evolving site, nowadays.
First V2.0 ALPHA version at CODEPLEX and preliminary chapters’ drafts of eBook (Second Edition)
Dear colleagues, after some time of effort, we can show you our preliminary version (alpha version, actually) of what V2.0 will be. We are initially covering mostly ‘the server-core’, with a single client app consuming it (Silverlight), and evolving and taking into account many experiences we got and learned also with you. We got a lot of feedback coming from our Discussions-Forum at Codeplex, and many other channels. Many of you have already used this project as a reference and have applied it into real & complex projects, with success in most of the cases, and this is the best reward we could get!. But also, we got many points we could improve. Any constructive feedback is important and will be taken into account. We’ll continue working and evolving it in order to get better patterns’ implementations, along with you.
Improvements in the Domain Layer
- Using EF 4.1 POCO Code-First approach for Domain Entities/Aggregates/ValueObjects
- Added more Domain logic within entities (no anemic domain)
- Better exposure of Aggregates’ elements
- Better support to navigations between Aggregates and elimination of inverse relationships not needed
- Entity Validation support
- Specification pattern implementation, use of expressions as specifications and composition support
Improvements in the Application Layer
- DTO and DTO-Adapters support
- Validation support
- Improvements in exception management
Improvements in the Data-Persistence-Infrastructure Layer
- Using EF 4.1, CodeFirst, DbContext
- Persistence layer simplification and improvements
- IoC/Unity: Elimination of abstractions no needed
- Better testing strategy for Integration Tests
Improvements in the Presentation Layer
- Reviewed and minor improvements in MVVM code
Improvements in the Distributed-Services Layer
- Segregation in 2 Web-Services (One per MODULE).
- Improvements regarding WCF exceptions handling (less spread code in Catch)
- We currently use SOAP Web-Services, but we will switch to REST in the coming future when the new WCF Web API (WebApi.all) (still in beta) will support Silverlight.
Here you can get preliminary main DRAFT chapters for V2.0 (Second Edition) currently being reviewed, not finished.
You can also download the first edition of the Arch-Guide eBook (free), but take into account that it is related to V1.0 of this project.
I would also like to remind the following (Project Scope and main Goals and what we are not covering):
This project/sample is willfully restricted to .NET implementation of most used patterns in N-Layered Domain Oriented Architectures based on simple scenarios easy to understand (Customers, Orders, Bank Transfers, etc.). This initiative is NOT trying to teach how to apply DDD. That shouldn't be Microsoft's goal and DDD is much more than Architecture & patterns implementation.
This is an Educational example, not a real world system, it shows educational scenarios, easy to understand useful from a patterns implementation point of view, but not necessarily as a whole business application. The architecture is decoupled and relatively complex so it would allow to grow your system.
Also, this sample goes along with our Architecture Guidance, and there are aspects in the guidance that are not covered by this sample, and viceversa.
Its main goal is to show how to use .NET 4.0 wave technologies implementing typical DDD patterns: N-Layered Architecture, Domain Entities, Aggregates, Repositories, Unit of Work, Domain Services, Application Services, DTOs, DTO-Adapters, etc.
Reminding what DDD is and what this project is NOT covering
Domain Driven Design is much more than Architecture and Design Patterns. It implies a specific way of working for development teams and their relationship with Domain experts, a good identification of Domain Model elements (Aggregates/Entity Model, etc.) based on the Ubiquitous Language for every Model we can have, identification of Bounded-Contexts related to models, and a long etcetera related to the application life cycle that we are not covering (only very slightly in our Guidance). There were already excellent literature and knowledge about that before this project was started, coming from people like Eric Evans, Martin Fowler, Udi Dahan, Greg Young, etc.
Our guidance and sample application focuses only on about a 20% of DDD subjects, we do NOT intend to teach DDD as a whole", we are only filling a gap we saw regarding implementing most useful Domain Oriented design patterns with the latest version of .NET.
And remember that we need you; we need your constructive feedback to evolve and improve this project.
Thank you very much.
Feedback and Improvements
Remember that this is a very early version (ALPHA and preliminary eBook Guidance drafts). We are, in fact, getting quite a lot of feedback and therefore refactoring many points & code that we acknowledge are improvable. But you can actually get the essence of our approach.
We’d really appreciate any constructive feedback in order to improve our current arch-guidance and sample-app.
See feedback from the community who have used this Guidance (V1.0) since many months ago: