SlideShare a Scribd company logo
Elements of DDD with
ASP.NET MVC &
Entity Framework Code First
Gabriel ENEA
Software developer / Maxcode.ro
Co-founder Joobs.ro – primul portal de joburi IT

07 may 2011
Updated:
Elements of software design


07 may 2011
Agenda Tags
# Unit Testing
# Enterprise Application Architecture
# Dependency Injection
# ASP.NET MVC 3
# Entity Framework 4.1 Code First
# Domain-Driven-Design
# Design Patterns
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



 but, in the end, do you achieve 99,99% of unit testing?
Is unit testing realizable? 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?
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!
Some directions
Modeling approaches
  Database First Design
  Model First Design
Layers
  How do we design them?
Business rules
  Where and how do we implement?
Persistence
  Should we use an ORM?
Modeling approach - Pros/Cons
Database First Design
  doesn't focus on business rules, only on the way the
   data is represented


Model First Design
  Conceptual Design
   defines a conceptual model of the entities and relations
    (UML vs. Domain-Specific Languages)
  Code First Design
   starts writing code: classes, properties, associations,
    businesss rules
Layers

         Presentation


          Business


         Data Access
Presentation


Layers – any problems?                       Business


                                            Data Access



Layers Coupling!

A strong coupling conducts to a hard way to do:
   unit testing
   refactoring
   agile development
   or be opened for changes
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!? 
And...what's inappropriate in this
code?
// 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;
        }
      }
...
Let's start with a new approach...DDD
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!
A new default architecture
Persistence
Requirements
 Persistence Ignorance (PI) / POCO
 Help Domain Model stay out of infrastructure stuff
 Decide where to store data
 Use code generation or an Object Relation (O/R) Mapper
   Metadata mapping
 Support for the Unit of Work pattern
Building blocks of Domain-Driven
Design
Today's tools
(from a web developer perspective)
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
DI frameworks
  Manage dependencies
  Castle Windsor, StructureMap, Spring.NET, Unity, ...
Stop, What is DI?
 = 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
Dependency Injection

                   Log4netLogger


 PatientService



                   PatientRepositoy
Dependency Injection
                           1) creates
         Builder                         PatientService




                         Log4netLogger
2) inject dependencies                                    3) uses




                            ILogger
Persistance with EF 4.1 CodeFirst
Benefits
 Mapping based on predefined conventions
 Support for Query Object pattern (LINQ - IQuerable
  interface)
 Fluent API for manual mapping entities to tables, no
  more .edmx files
 Entity Validation
ASP.NET MVC 3 and DI support
 Based on MVC pattern
 Provides better support for IoC
   Views/Controllers


 Check IDependencyResolver interface
   simplify service location and dependency resolution


TService GetService<TService>() { … }

IEnumerable<TService> GetServices<TService>() { … }
Demo



What? We have a demo? Finally!
Conclusions
Focus on
  Analyze application dependencies
  Business rules
  Do refactoring!
  Design your Domain
  Don’t forget to do Unit testing
Questions?
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/domain-driven-design-quickly
The end…Thank you!


Elements of DDD with
ASP.NET MVC &
Entity Framework Code First
Gabriel ENEA
Software developer / Maxcode.ro
Co-founder Joobs.ro – primul portal de joburi IT

07 may 2011

More Related Content

PDF
Elements of DDD with ASP.NET MVC & Entity Framework Code First v2
PDF
Domain-Driven Design with ASP.NET MVC
PPTX
Implementing DDD with C#
PPTX
Entity Framework and Domain Driven Design
PPTX
Domain driven design
PDF
Domain-Driven Design (Artur Trosin Product Stream)
PDF
Add Some DDD to Your ASP.NET MVC, OK?
PDF
Clean architecture with ddd layering in php
Elements of DDD with ASP.NET MVC & Entity Framework Code First v2
Domain-Driven Design with ASP.NET MVC
Implementing DDD with C#
Entity Framework and Domain Driven Design
Domain driven design
Domain-Driven Design (Artur Trosin Product Stream)
Add Some DDD to Your ASP.NET MVC, OK?
Clean architecture with ddd layering in php

What's hot (20)

PDF
Introduction to-ddd
PPTX
Implementing DDD Concepts in PHP
PPTX
Decoupling with Domain Events
PPTX
How to Implement Domain Driven Design in Real Life SDLC
PDF
Domain driven design and model driven development
PDF
Hexagonal architecture - message-oriented software design
KEY
ZendCon 2011 UnCon Domain-Driven Design
PDF
Domain Driven Design
PPTX
EF6 and DDD
PPTX
Domain Driven Design Quickly
PPTX
CQRS recipes or how to cook your architecture
PDF
Refactoring for Domain Driven Design
PDF
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
PPT
Real-world Entity Framework
PDF
Hexagonal
PPTX
Introduction To Domain Driven Design
PPTX
Domain-Driven Design: The "What" and the "Why"
PDF
Hexagonal architecture - message-oriented software design (PHP Benelux 2016)
PPTX
Domain driven design
PDF
Hexagonal architecture in PHP
Introduction to-ddd
Implementing DDD Concepts in PHP
Decoupling with Domain Events
How to Implement Domain Driven Design in Real Life SDLC
Domain driven design and model driven development
Hexagonal architecture - message-oriented software design
ZendCon 2011 UnCon Domain-Driven Design
Domain Driven Design
EF6 and DDD
Domain Driven Design Quickly
CQRS recipes or how to cook your architecture
Refactoring for Domain Driven Design
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
Real-world Entity Framework
Hexagonal
Introduction To Domain Driven Design
Domain-Driven Design: The "What" and the "Why"
Hexagonal architecture - message-oriented software design (PHP Benelux 2016)
Domain driven design
Hexagonal architecture in PHP
Ad

Similar to Elements of DDD with ASP.NET MVC & Entity Framework Code First (20)

PDF
Clean architecture with asp.net core
PPTX
Entity framework
PPT
The Magic Of Application Lifecycle Management In Vs Public
PPTX
Learn Mastering-the-NET-Interview 2.pptx
DOCX
Actively looking for an opportunity to work as a challenging Dot Net Developer
DOCX
Actively looking for an opportunity to work as a challenging Dot Net Developer
PPTX
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
PDF
Best practices for creating modular Web applications
PDF
Entity Framework Interview Questions PDF By ScholarHat
PDF
ASP.NET Core Interview Questions PDF By ScholarHat.pdf
PPTX
Azure presentation nnug dec 2010
PPTX
Latest trends in information technology
PPTX
Pragmatic Architecture in .NET
PDF
Java Programming
PPTX
Onion Architecture with S#arp
PPTX
Spring tutorials
PPTX
Building nTier Applications with Entity Framework Services (Part 1)
PDF
Isset Presentation @ EECI2009
PPTX
Building nTier Applications with Entity Framework Services (Part 1)
PPTX
Microsoft Entity Framework
Clean architecture with asp.net core
Entity framework
The Magic Of Application Lifecycle Management In Vs Public
Learn Mastering-the-NET-Interview 2.pptx
Actively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net Developer
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Best practices for creating modular Web applications
Entity Framework Interview Questions PDF By ScholarHat
ASP.NET Core Interview Questions PDF By ScholarHat.pdf
Azure presentation nnug dec 2010
Latest trends in information technology
Pragmatic Architecture in .NET
Java Programming
Onion Architecture with S#arp
Spring tutorials
Building nTier Applications with Entity Framework Services (Part 1)
Isset Presentation @ EECI2009
Building nTier Applications with Entity Framework Services (Part 1)
Microsoft Entity Framework
Ad

More from Enea Gabriel (10)

PPTX
Moving forward with ASP.NET Core
PPTX
The future of ASP.NET / CodeCamp/Iasi 25 Oct 2014
PPSX
Improving the availability of your website
PPTX
Applying EF Code First at Your Job
PPTX
Noutăţi în ASP.NET MVC 2
PPTX
FII absolvent!
PPTX
Introducere în ASP.NET MVC prin exemple
PPTX
Magia testelor automate cu ASP.NET MVC
PPTX
Rute cu ASP.NET MVC
PPTX
Model View Controller și ASP.NET MVC + AJAX
Moving forward with ASP.NET Core
The future of ASP.NET / CodeCamp/Iasi 25 Oct 2014
Improving the availability of your website
Applying EF Code First at Your Job
Noutăţi în ASP.NET MVC 2
FII absolvent!
Introducere în ASP.NET MVC prin exemple
Magia testelor automate cu ASP.NET MVC
Rute cu ASP.NET MVC
Model View Controller și ASP.NET MVC + AJAX

Recently uploaded (20)

PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
cuic standard and advanced reporting.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Approach and Philosophy of On baking technology
PPTX
Cloud computing and distributed systems.
PPTX
Big Data Technologies - Introduction.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Empathic Computing: Creating Shared Understanding
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Review of recent advances in non-invasive hemoglobin estimation
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
The AUB Centre for AI in Media Proposal.docx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Understanding_Digital_Forensics_Presentation.pptx
Spectral efficient network and resource selection model in 5G networks
cuic standard and advanced reporting.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Approach and Philosophy of On baking technology
Cloud computing and distributed systems.
Big Data Technologies - Introduction.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
20250228 LYD VKU AI Blended-Learning.pptx
Empathic Computing: Creating Shared Understanding
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication

Elements of DDD with ASP.NET MVC & Entity Framework Code First

  • 1. Elements of DDD with ASP.NET MVC & Entity Framework Code First Gabriel ENEA Software developer / Maxcode.ro Co-founder Joobs.ro – primul portal de joburi IT 07 may 2011
  • 2. Updated: Elements of software design 07 may 2011
  • 3. Agenda Tags # Unit Testing # Enterprise Application Architecture # Dependency Injection # ASP.NET MVC 3 # Entity Framework 4.1 Code First # Domain-Driven-Design # Design Patterns
  • 4. 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  but, in the end, do you achieve 99,99% of unit testing?
  • 5. Is unit testing realizable? 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?
  • 6. 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!
  • 7. Some directions Modeling approaches  Database First Design  Model First Design Layers  How do we design them? Business rules  Where and how do we implement? Persistence  Should we use an ORM?
  • 8. Modeling approach - Pros/Cons Database First Design  doesn't focus on business rules, only on the way the data is represented Model First Design  Conceptual Design  defines a conceptual model of the entities and relations (UML vs. Domain-Specific Languages)  Code First Design  starts writing code: classes, properties, associations, businesss rules
  • 9. Layers Presentation Business Data Access
  • 10. Presentation Layers – any problems? Business Data Access Layers Coupling! A strong coupling conducts to a hard way to do:  unit testing  refactoring  agile development  or be opened for changes
  • 11. 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!? 
  • 12. And...what's inappropriate in this code? // 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; } } ...
  • 13. Let's start with a new approach...DDD 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!
  • 14. A new default architecture
  • 15. Persistence Requirements  Persistence Ignorance (PI) / POCO  Help Domain Model stay out of infrastructure stuff  Decide where to store data  Use code generation or an Object Relation (O/R) Mapper  Metadata mapping  Support for the Unit of Work pattern
  • 16. Building blocks of Domain-Driven Design
  • 17. Today's tools (from a web developer perspective) 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 DI frameworks  Manage dependencies  Castle Windsor, StructureMap, Spring.NET, Unity, ...
  • 18. Stop, What is DI?  = 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
  • 19. Dependency Injection Log4netLogger PatientService PatientRepositoy
  • 20. Dependency Injection 1) creates Builder PatientService Log4netLogger 2) inject dependencies 3) uses ILogger
  • 21. Persistance with EF 4.1 CodeFirst Benefits  Mapping based on predefined conventions  Support for Query Object pattern (LINQ - IQuerable interface)  Fluent API for manual mapping entities to tables, no more .edmx files  Entity Validation
  • 22. ASP.NET MVC 3 and DI support  Based on MVC pattern  Provides better support for IoC  Views/Controllers  Check IDependencyResolver interface  simplify service location and dependency resolution TService GetService<TService>() { … } IEnumerable<TService> GetServices<TService>() { … }
  • 23. Demo What? We have a demo? Finally!
  • 24. Conclusions Focus on  Analyze application dependencies  Business rules  Do refactoring!  Design your Domain  Don’t forget to do Unit testing
  • 26. 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/domain-driven-design-quickly
  • 27. The end…Thank you! Elements of DDD with ASP.NET MVC & Entity Framework Code First Gabriel ENEA Software developer / Maxcode.ro Co-founder Joobs.ro – primul portal de joburi IT 07 may 2011