Elements of DDD with ASP.NET MVC & Entity Framework Code First v2
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 8,353 views
Uploaded on

This is a presentation about the new Domain Driven Design architecture in combination with ASP.NET MVC 3 and Entity Framework 4.1 CodeFirst tools....

This is a presentation about the new Domain Driven Design architecture in combination with ASP.NET MVC 3 and Entity Framework 4.1 CodeFirst tools.

The session was part of the IT Camp 2011 event (http://www.itcamp.ro).

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Unfortunately, both links appear to be broken. Any chance of getting a new one? I would be very interested to see the demo project.
    Are you sure you want to
    Your message goes here
  • Strange..it works only on Chrome :)
    Try this: http://bit.ly/iMpuCv
    Are you sure you want to
    Your message goes here
  • Demo-ul e publicat aici: http://bit.ly/ITCamp26-27mai2011-DDDDemo
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
8,353
On Slideshare
6,775
From Embeds
1,578
Number of Embeds
28

Actions

Shares
Downloads
110
Comments
3
Likes
1

Embeds 1,578

http://gabrielenea.blogspot.ro 762
http://gabrielenea.blogspot.com 695
http://gabrielenea.blogspot.ru 29
http://gabrielenea.blogspot.de 15
http://gabrielenea.blogspot.co.uk 10
http://gabrielenea.blogspot.cz 8
http://gabrielenea.blogspot.it 8
http://gabrielenea.blogspot.nl 7
http://gabrielenea.blogspot.com.es 7
http://gabrielenea.blogspot.fr 6
http://gabrielenea.blogspot.ch 3
url_unknown 3
http://gabrielenea.blogspot.se 3
http://gabrielenea.blogspot.ie 2
http://gabrielenea.blogspot.co.at 2
http://darya-ld1.linkedin.biz 2
http://gabrielenea.blogspot.co.il 2
http://gabrielenea.blogspot.no 2
http://www.slideshare.net 2
http://www.gabrielenea.blogspot.ro 2
http://gabrielenea.blogspot.com.tr 1
http://gabrielenea.blogspot.com.br 1
http://gabrielenea.blogspot.gr 1
http://131.253.14.66 1
http://gabrielenea.blogspot.kr 1
http://gabrielenea.blogspot.dk 1
http://gabrielenea.blogspot.in 1
http://gabrielenea.blogspot.com.au 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Elements of DDD with ASP .NET MVC &Entity Framework Code First Gabriel ENEA, Technical Director MAXCODE.nlCo-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
  • 4. Application requirementsDEMO Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 5. UNIT TESTING CHALLENGES Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 6. How do you test it?Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 7. Testing on componentsPremium 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 doesnt 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 dont 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. Lets start thinking to architecture design What? Right, now!? Hey, we have only 1 hour to finish this presentation!  Indeed, but lets 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 AccessPremium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 14. 1 - Layers – any problems? Presentation BusinessLayers Coupling! Data AccessA 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 rulesWhere 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...whats inappropriate here?// somewhere in the business layerpublic 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 - PersistenceRequirements• 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. Lets 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 DDDPremium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 22. TODAYS TOOLS Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 23. Todays 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 patternEntity 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 Log4netLoggerPatientService PatientRepositoy Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 26. Dependency Injection 1) creates Builder PatientService Log4netLogger2) 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 resolutionTService GetService<TService>() { … }IEnumerable<TService> GetServices<TService>() { … } Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 28. Persistance with EF 4.1 CodeFirst1st 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 FrameworkCodeFirst 4.1DEMO Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  • 30. ConclusionsFocus 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. ResourcesBooks• 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 NilssonOnline 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 FirstQ&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