O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio

Confira estes a seguir

1 de 33 Anúncio

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

Baixar para ler offline

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).

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).

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Anúncio

Semelhante a Elements of DDD with ASP.NET MVC & Entity Framework Code First v2 (20)

Anúncio

Mais recentes (20)

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

  1. 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. 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. 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. 4. Application requirements DEMO Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  5. 5. UNIT TESTING CHALLENGES Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  6. 6. How do you test it? Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  7. 7. Testing on components Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  8. 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. 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. 10. TODAY ARCHITECTURAL DESIGN Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  11. 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. 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. 13. 1 - Layers Presentation Business Data Access Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  14. 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. 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. 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. 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. 18. NEW APPROACH: DDD Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  19. 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. 20. A new default architecture - DDD Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  21. 21. Building blocks of DDD Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  22. 22. TODAY'S TOOLS Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  23. 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. 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. 25. Dependency Injection Log4netLogger PatientService PatientRepositoy Premium conference on Microsoft’s Dev and ITPro technologies @itcampro / #itcampro
  26. 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. 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. 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. 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. 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. 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. 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. 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

×