Project Description
Domain Oriented N-Layered .NET 4.0 Sample App.
By Microsoft - Spain
Using .NET 4.0, C#, Entity Framework 4.0,
Implementing typical DDD architecture & design patterns
Optional: Windows Server AppFabric & Windows Azure app versions
Sample-App Current state - Version 1.0.
This Sample-Application (currently our final V1.0) is an implementation example of our local Architecture Guide/Book (2009-2010), explained here:
http://msdn.microsoft.com/es-es/architecture/default.aspx
The Guide/Book current state is also a final Version. (Take into account that Sample-App is in English, but the Guide/Book is in Spanish, we're in the process of translating it to English).
Architecture Diagrams
Architecture-Technology Diagram |
Detailed Architecture Diagram |
|
|
Higher resolution diagram:
http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-84-75-metablogapi/5658.image_5F00_1299F40D.png
Required Base Software _
- Microsoft Visual Studio 2010
- Microsoft Expression Blend 4
- Microsoft SQL Server 2008 R2 Express (or higher)
- Microsoft Unity 2.0
- Microsoft PEX 2010
- Microsoft WPF Toolkit
- Microsoft Silverlight 4.0 Toolkit
- Microsoft Silverlight Tools for VS.2010
- Windows Server AppFabric (Just for the AppFabric compatible version)
- Windows Azure Tools for VS.2010 (Just for the Windows Azure compatible version)
Overview
This project implements a very simple business scenario, but it is quite end to end complete regarding
DDD N-Layered Architecture style , showing DDD design patterns implementation (
Repository, UoW, Entity, Aggregate, Value-Object, etc.), using
.NET 4.0 'technology wave' (EF 4.0, WCF 4.0, etc.) and several Archetypes (several clients, like
WPF 4.0 ,
Silverlight 4.0 and
ASP.NET MVC).
Silverlight 4.0 Client
Customer List |
Silverlight Transition |
|
|
View Customer |
|
WPF 4.0 Client
WPF Customer List |
WPF View Customer |
|
|
Bank Transfers |
|
It is very
'Domain Oriented' , therefore, it illustrates typical
DDD patterns , like
Domain Entity, Value-Object, Aggregates, Repository, Unit of Work, Specification(most of those patterns originally defined by
Eric Evans and
Martin Fowler ), but implemented using ADO.NET
Entity Framework 4.0 , Unity, WCF, and PEX (Stubs and Moles) for Unit Testing and mocking.
DDD is much more than this!!
We're talking about complex apps…, all their business rules (Domain logic) are points that, in most of the cases, need to be changed quite a lot during the app’s life. So it is critical to be able to change the app and test it in an easy way and independently from infrastructure areas (technology, data stores, data access technolgies, ORMs, etc.). Because of that, it is important to have the Domain/Business Layer (domain logic, entities, etc.) decoupled from the other layers.
Having said so, in our opinion, the best actual architectural style that fits with those requirements is a
Domain Oriented N-Layered Architecture which
is part of
DDD (Domain Driven Design). And
this Sample-app is showing a way to implement a Domain Oriented N-Layered Architecture.
But, and this is extremely important, DDD is on the other hand, much more than just a proposed Architecture and patterns. DDD is a way to build apps, a way for the team, to work in projects. According to DDD, the project’s team should work in a specific way, should have direct communication with the Domain Experts (the customer, in many cases). The team should use an
‘Ubiquitous Language’ which has to be the same language/terms used by the domain experts, etc.
But, all those ways to work are not part of this Sample-App, because it is process, kind of ALM, so,
if you want to really “Do DDD”, you’ll need to read Eric-Evans' book or any other DDD book where they talk about the DDD process, about the project and the team, not just the Architecture and patterns. Architecture and patterns are just a small part of DDD, but, in this case those are the points we are showing here (DDD architecture and patterns).
But we want to highlight that DDD is much more than Architecture and design patterns.
Future versions plan
For next versions we'd like to add the following features:
- New Core flavour: EF 4.1 Code First approach plus DTOs (Aditional flavor to Self Tracking Entities)
- Claims Base Security (For Core flavour plus ADFS2.0 and Azure flavour plus ACS)
- New Clients (Silverlight 5, Phone 7, HTML5)
- More new stuff!
The Team
This project is locally supported by several Software Architects and Developers (coming from Microsoft DPE Spain, MVPs, partners (especially Plain-Concepts) and Microsoft Services).
We'll be happy hearing from you and getting your feed-back to improve and evolve this Architectural example!!.
Regards,
Cesar de la Torre
Architect – Development & Platform Evangelism (Spain)
Microsoft