Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC

10,423 views

Published on

An introduction to ASP.NET MVC beta, in order to leverage this in a later session with the Domain Driven Design concepts.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,423
On SlideShare
0
From Embeds
0
Number of Embeds
1,141
Actions
Shares
0
Downloads
304
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC

  1. 1. Applying Domain Driven Design on Asp.net MVC Mohamed Meligy
  2. 2. Agenda  ASP.NET MVC, The Steps  Model, Controller, View  Why ASP.NET MVC  Domain, AKA, Model  The Domain Model  The Ubiquitous Language  Building Blocks  Entities / Value Objects  Aggregates / Factories  Repositories  Services / Modules  Putting it all together
  3. 3. Model View Controller ASP.NET MVC – Form few thousand feet …
  4. 4. ASP.NET Futures Themes  Webforms  AJAX  MVC  Dynamic Data  Feature Sharing  Webforms with AJAX  Dynamic Data with MVC …  jQuery
  5. 5. M – V – C, The Steps … Routing Request Forward Step 0 Incoming request matched by Routing
  6. 6. M – V – C, The Steps … Controller Request Step 1 Incoming request directed to Controller
  7. 7. M – V – C, The Steps … Controller Request Model Step 2 Controller processes request and forms a data Model
  8. 8. M – V – C, The Steps … Controller Request View Step 3 Model is passed to View
  9. 9. M – V – C, The Steps … Controller Request View Step 4 View transforms Model into appropriate output format
  10. 10. M – V – C, The Steps … Controller Request View Response Step 5 Response is rendered
  11. 11. The ASP.NET MVC Building Blocks Simply creating a new project
  12. 12. The model  The class that needs to be presented, or processed  Can be bound in controller  Model Binders  Can live anywhere in your solution
  13. 13. The Controller  A set of action methods that share a common Controller context  … which is different from HTTP context   An action: 1. Receives the request parameters 2. Creates any required model (user, etc..) 3. Calls services or repositories to execute data or get the models to be displayed 4. Selects the view and sends the model to it, with any additional info (like page title, …)
  14. 14. The ASP.NET MVC Building Blocks ROUND TWO !!
  15. 15. The View  Just renderer  No logic should go there  Page lifecycle ?  Yes and No!  Code Behind exists but not recommended  No View State, No Server Controls  Really?  HTML Helpers  Takes the view data from the controller  Can be typed or Dictionary of values  Not Just Web forms code  View Engines
  16. 16. View Engines Web forms • The default option • Comes with VS • Same experience: • Syntax • VS Support
  17. 17. View Engines NHAML • Based on Ruby On Rails HAML Engine • http://code.google.com/p/nhaml • http://andrewpeters.net/2007/12/19/introducing-nhaml-an-aspnet-mvc-view-engine engine
  18. 18. The webforms view Engine From ASP.NET MVC source code
  19. 19. Why Oh, WHY !!!  Easier …  Tight control over markup  User/SEO friendly URLs  Conventions and Guidance  jQuery (Built-in)  Tight control: Not just markup  Everything is replaceable  Interface based style  Not full with sealed/internal stuff   Testability  The guys who created it are just awesome   94% Code Coverage/1051 unit tests
  20. 20. The other side of the story  It’s not as easy as you think!  To go low level or not to go; this IS the question.  IIS 6 Quirks  Custom Controls
  21. 21. Where to go  Official website http://asp.net/mvc  Source Code http://codeplex.com/aspnet  Blogs  The ASP.NET MVC Team  Scott Guthrie http://weblogs.asp.net/scottgu  Rob Conrey http://blog.wekeroad.com  MVC Store Front http://blog.wekeroad.com/mvc-storefront  Phil Haack http://haacked.com  Scott Hanselman http://hanselman.com  Stephen Walthler http://weblogs.asp.net/stephenwalther  http://www.chrisvandesteeg.nl  http://www.singingeels.com
  22. 22. http://weblogs.asp.net/meligy

×