Mais conteúdo relacionado

Similar a Domain-Driven Design with ASP.NET MVC(20)


Mais de Steven Smith(20)


Domain-Driven Design with ASP.NET MVC

  1. Domain-Driven Designwith ASP.NET MVC Steve Smith CTO, Falafel Software @ardalis|
  2. What is Domain-Driven Design (DDD)?
  3. Communication •Ubiquitous Language •Domain Expert Interaction Modeling •Core Domain •Generic Subdomains •Bounded Context •Context Map •Shared Kernel •Anti-Corruption Layer Implementation •Model-Driven Design •Layered Architecture •Entities •Value Objects •Services •Factories •Aggregates •Repositories •Domain Events
  4. DDD is BIG “The more you know, the more you realize you know nothing.” Socrates
  5. DDD Fundamentals Course •Over 4 hours of content (demos using MVC + SignalR) •
  6. DDD Benefits •Flexibility •Software models customer’s understanding of problem •Breaks complexity into manageable pieces •Well-organized; easily tested •Business logic lives in one place
  7. DDD Drawbacks •Time and Effort •Learning Curve •Overkill without Complexity •“Anemic” domain model problem
  8. Communication “As software developers, we fail in two ways: we build the thing wrong, or we build the wrong thing.” Me
  9. Ubiquitous Language
  10. Language “A project faces serious problems when its language is fractured.” Eric Evans
  11. Ubiquitous Language •Ubiquitous–adjective. Present, appearing, or found everywhere. •Synonyms: pervasive, universal •Used within a given Bounded Context •Used in code, design documents, and conversations --Everywhere
  12. DomainTerms Domain Experts Problem Domain Core Domain Sub-Domains
  13. Bounded Contexts •Provide Separation of Concerns •Limit complexity •Should be clearly boundedand separate
  14. Appointment Scheduling Billing
  15. Appointment Scheduling Billing Anti- Corruption Layer
  16. Model Driven Design Not Data-Driven
  17. Layered Architecture •Ports and Adapters •Hexagonal •Onion
  18. Organizing in a Solution
  19. Entities “Many objects are not fundamentally defined by their attributes, but rather by a thread of continuity and identity.” Eric Evans
  20. Changing Attributes Doesn’t Change Which One We’re Talking About ID:1 •Name: Steve Smith •Twitter: @ardalis •Favorite Color: Blue ID: 1 •Name: StevenSmith •Twitter: @ardalis •Favorite Color: Blue ID: 1 •Name: Steven Smith •Twitter: @ardalis •Favorite Color: Orange
  21. Value Objects •Defined by their attributes •Immutable •Should have no side effects •Examples: strings, addresses, currency
  22. Immutable!
  23. Domain Services •Not a natural part of an Entity or Value Object •Interfacedefined in terms of other model elements •Should be stateless(but may have side effects)
  24. Services in Different Layers UI Layer & Application Layer Infrastructure Domain (“Application Core”) Message Sending Message Processing XML Parsing UI Services Transfer Between Accounts Process Order Send Email Log to a File
  25. Domain Events “Use a Domain Event to capture an occurrence of something that happened in the domain.” Vaughn Vernon Implementing Domain-Driven Design
  26. Domain Event Tips •Consider for cases of “whenthis happens, then…” •Or “Notify someone when…” •Domain events represent the past •They already happened •Thus, they should be immutable
  27. Examples of Domain Events UserAuthenticated Appointment Confirmed PaymentReceived $¢£¥
  28. Designing Domain Events •Each Event is a Class •Use a common interface (e.g. IDomainEvent) •Capture when the event took place •Include details •What would you need to know to trigger this event again? •Include identitiesof any entitiesinvolved •Initialize all state in constructor •No behavior or side effects –just state
  29. More DDD Topics •Aggregates •Repositories •Factories DDD Fundamentals on Pluralsight Eric Evans’ DDD Book
  30. Domain Models and MVC Models •UI interacts directly with Domain Model •Entities, Value Objects •Interfaces, Services •Views may work with custom ViewModels •Client (HTML/JS) code may use another ViewModelas well
  31. Controllers •Keep as small as possible •Eliminate business logic •Inject all dependencies
  32. Views •No logic unless encapsulated in tested helpers •No business logic if it can instead be modeled in the domain
  33. SignalR •Awesome addition to ASP.NET •Great for notifications to multiple users •Ties in easily with Domain Events
  34. Solution Structure •Core •Interfaces •Model (Entities, Value Objects) •Domain Services •Infrastructure •DbContext •File Access •System Clock Access •Email services •Web •MVC Project •No direct use of Infrastructure
  35. Demo Putting DDD into ASP.NET MVC