The document discusses Domain-Driven Design (DDD) with ASP.NET MVC and Entity Framework Code First. It covers challenges with traditional architecture like layers coupling and where to implement business rules. DDD is presented as a new default architecture where the database is not the primary focus, layers are loosely coupled, and business rules are within the application domain. Today's tools like ASP.NET MVC, dependency injection frameworks, and Entity Framework Code First are discussed. A demo is presented and conclusions recommend focusing on analyzing dependencies, designing the domain, and doing refactoring and unit testing.
Strategies for Landing an Oracle DBA Job as a Fresher
Elements of DDD with ASP.NET MVC & Entity Framework Code First v2
1. Elements of DDD with
ASP .NET MVC &
Entity Framework Code First
Gabriel ENEA, Technical Director
MAXCODE.nl
Co-founder Joobs.ro – the first IT job portal in Romania
CodeCamp member / Iași
gabriel.enea@maxcode.ro / gabrielenea.blogspot.com / @dotnet18
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
2. IT Camp 2011
• Thanks for coming!
• ITCamp is made possible by our sponsors:
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
3. Agenda
# Unit Testing challenges
# Today Architectural Design
# New approach: Domain-Driven-Design
# Today’s Tools (@web)
# Demo
• Q&A
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
8. How do you start building an
application architecture?
Focus on?
• building an architecture from scratch
• thinking about how to achieve unit testing
• start with modeling the database schema and data relations
• using drag & drop programming
• modeling the domain entities, relations, business rules
• reusing existing code?
• but, in the end, do you achieve 99,99% test code coverage?
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
9. Is unit testing achievable? 100%?
Yes or No? Who knows?
Maybe not! Possible answers:
• The customer doesn't understand this need
• Neither the management staff
• Instead, everyone expects you to write the perfect code
• As developers, every time we say: we need time to do it
right!
• But, do we need time or we don't know how to achieve it?
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
10. TODAY ARCHITECTURAL DESIGN
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
11. Let's start thinking to architecture
design
What? Right, now!?
Hey, we have only 1 hour to finish this
presentation!
Indeed, but let's try to do something!
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
12. What stops 100% unit testing?
1. Layers
– How do we design them?
2. Business rules
– Where and how do we implement?
3. Persistence
– Should we use an ORM?
…
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
13. 1 - Layers
Presentation
Business
Data Access
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
14. 1 - Layers – any problems?
Presentation
Business
Layers Coupling! Data Access
A strong coupling conducts to a hard way to do:
– unit testing
– refactoring
– agile development
– or be opened for changes
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
15. 2 - Business rules
Where should these be located?
– Database
– Business layer
– User Interface (aka code behind!)
How do we test them?
– Running the application
– Automatically, maybe using unit tests
– Or we should let the customer test them!?
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
16. And...what's inappropriate here?
// somewhere in the business layer
public class Patient {
public DateTime Birthdate { get; set; }
public int Age { // computed value
get {
return DateTime.Now.Year - this.Birthdate.Year;
}
Strong coupling!
}
public bool IsAdult { // business rule
get {
return this.Age >= 18;
}
}
...
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
17. 3 - Persistence
Requirements
• Persistence Ignorance / POCO
• Help Domain Model stay out of
infrastructure stuff
• Decide where to store data (NoSQL?)
• Use code generation or an Object Relation
(O/R) Mapper
– Metadata mapping
• Support for the Unit of Work pattern
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
18. NEW APPROACH: DDD
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
19. Let's start with a new approach...
Domain-Driven-Design
• What is Domain?
A new default architecture where:
• the database is not the first focus
• the layers are loosely coupled
• the business rules are within the application Domain
• it is easier to achieve unit testing
• Why? Today we have the tools!
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
20. A new default architecture - DDD
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
21. Building blocks of DDD
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
22. TODAY'S TOOLS
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
23. Today's tools
(from a web developer perspective)
Dependency Injection frameworks
– Manage dependencies
– Castle Windsor, StructureMap, Spring.NET, Unity, ...
ASP.NET MVC 3
– a mature web development platform based on MVC
pattern
Entity Framework 4.1 Code First / NHibernate
– helps you focus on your domain
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
24. What is Dependency Injection?
• = DI.Equals(IoC); // true or false?
• IoC = Inversion of Control
• DI = Dependency Injection
• Helps you to decouple the application dependencies
– Logging mechanisms (log4net, Enterprise Library Logging
Application Block, ...)
– Persistence mechanism (direct access to database, ORM)
– User Interface dependencies on Domain services
– Layers
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
25. Dependency Injection
Log4netLogger
PatientService
PatientRepositoy
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
26. Dependency Injection
1) creates
Builder PatientService
Log4netLogger
2) inject dependencies 3) uses
ILogger
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
27. ASP.NET MVC 3 and DI support
• Based on MVC pattern
• Provides better support for IoC
– Views/Controllers
• Model Validation support
• Check IDependencyResolver interface
– simplify service location and dependency resolution
TService GetService<TService>() { … }
IEnumerable<TService> GetServices<TService>() { … }
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
28. Persistance with EF 4.1 CodeFirst
1st version benefits:
• CodeFirst development
• Better POCO support
• Mapping based on predefined conventions
(Convention over configuration)
• Fluent API for manual mapping entities to tables, no
more .edmx files
• Built-in Model-Level Validation
• Dynamic database creation and dropping
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
29. DDD architecture with ASP.NET MVC 3, Unity, Entity Framework
CodeFirst 4.1
DEMO
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
30. Conclusions
Focus on
– Analyze application dependencies
– Business rules
– Do refactoring!
– Design your Domain
– Don’t forget to do Unit testing
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
31. Resources
Books
• Domain-Driven Design, Tackling Complexity in the
Heart of Software, by Eric Evans
• Applying Domain-Driven Design and Patterns, With
Examples in C# and .NET, by Jimmy Nilsson
Online resources
• http://domaindrivendesign.org/
• http://www.infoq.com/minibooks/domai
n-driven-design-quickly
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
32. Elements of DDD with ASP.NET MVC & Entity Framework Code First
Q&A
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
33. Don’t forget!
Get your free Azure pass! We want your feedback!
• 30+15 days, no CC req’d • Win a WP7 smartphone
– http://bit.ly/ITCAMP11 – Fill in your feedback forms
– Promo code: ITCAMP11 – Raffle: end of the day
Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro