Add Some DDD to Your ASP.NET MVC, OK?
-
Upload
steven-smith -
Category
Software
-
view
837 -
download
2
description
Transcript of Add Some DDD to Your ASP.NET MVC, OK?
![Page 2: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/2.jpg)
WHAT IS DOMAIN-DRIVEN DESIGN (DDD)?
![Page 3: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/3.jpg)
![Page 4: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/4.jpg)
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
![Page 5: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/5.jpg)
DDD IS BIG
“THE MORE YOU KNOW, THE MORE YOU REALIZE YOU KNOW
NOTHING.”
SOCRATES
![Page 6: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/6.jpg)
DDD FUNDAMENTALS COURSE
• OVER 4 HOURS OF CONTENT (DEMOS USING MVC + SIGNALR)
• HTTP://BIT.LY/PS-DDD
![Page 7: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/7.jpg)
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
![Page 8: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/8.jpg)
DDD DRAWBACKS
• TIME AND EFFORT
• LEARNING CURVE
• OVERKILL WITHOUT COMPLEXITY
• “ANEMIC” DOMAIN MODEL PROBLEM
![Page 9: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/9.jpg)
COMMUNICATION
“AS SOFTWARE DEVELOPERS, WE FAIL IN TWO WAYS: WE BUILD THE
THING WRONG, OR WE BUILD THE WRONG THING.”
ME
![Page 10: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/10.jpg)
![Page 11: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/11.jpg)
UBIQUITOUS LANGUAGE
http://upload.wikimedia.org/wikipedia/commons/2/23/Rosetta_Stone.JPG
![Page 12: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/12.jpg)
LANGUAGE
“A PROJECT FACES SERIOUS PROBLEMS WHEN ITS LANGUAGE IS
FRACTURED.”
ERIC EVANS
![Page 13: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/13.jpg)
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
![Page 14: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/14.jpg)
DOMAIN TERMS
Domain Experts
Problem Domain
Core Domain
Sub-Domains
![Page 15: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/15.jpg)
BOUNDED CONTEXTS
• PROVIDE SEPARATION OF CONCERNS
• LIMIT COMPLEXITY
• SHOULD BE CLEARLY BOUNDED AND SEPARATE
![Page 16: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/16.jpg)
Appointment Scheduling Billing
![Page 17: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/17.jpg)
Appointment Scheduling Billing
Anti-
Corruption
Layer
![Page 18: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/18.jpg)
MODEL DRIVEN DESIGN
NOT DATA-DRIVEN
![Page 19: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/19.jpg)
LAYERED ARCHITECTURE
• PORTS AND ADAPTERS
• HEXAGONAL
• ONION
![Page 20: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/20.jpg)
ORGANIZING IN A SOLUTION
![Page 21: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/21.jpg)
ENTITIES
“MANY OBJECTS ARE NOT FUNDAMENTALLY DEFINED BY THEIR
ATTRIBUTES, BUT RATHER BY A THREAD OF CONTINUITY AND IDENTITY.”
ERIC EVANS
![Page 22: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/22.jpg)
CHANGING ATTRIBUTES DOESN’T CHANGE WHICH ONE WE’RE TALKING ABOUT
ID:1
• Name: Steve Smith
• Twitter: @ardalis
• Favorite Color: Blue
ID: 1
• Name: Steven Smith
• Twitter: @ardalis
• Favorite Color: Blue
ID: 1
• Name: Steven Smith
• Twitter: @ardalis
• Favorite Color: Orange
![Page 23: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/23.jpg)
![Page 24: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/24.jpg)
![Page 25: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/25.jpg)
VALUE OBJECTS
• DEFINED BY THEIR ATTRIBUTES
• IMMUTABLE
• SHOULD HAVE NO SIDE EFFECTS
• EXAMPLES: STRINGS, ADDRESSES, CURRENCY
![Page 26: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/26.jpg)
![Page 27: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/27.jpg)
Immutable!
![Page 28: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/28.jpg)
DOMAIN SERVICES
• NOT A NATURAL PART OF AN ENTITY OR VALUE OBJECT
• INTERFACE DEFINED IN TERMS OF OTHER MODEL ELEMENTS
• SHOULD BE STATELESS (BUT MAY HAVE SIDE EFFECTS)
![Page 29: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/29.jpg)
SERVICES IN DIFFERENT LAYERS
UI Layer& Application Layer
InfrastructureDomain(“Application Core”)
Message Sending
Message Processing
XML Parsing
UI Services
Transfer Between Accounts
Process Order
Send Email
Log to a File
![Page 30: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/30.jpg)
DOMAIN EVENTS
“USE A DOMAIN EVENT TO CAPTURE AN OCCURRENCE OF SOMETHING
THAT HAPPENED IN THE DOMAIN.”
VAUGHN VERNON
IMPLEMENTING DOMAIN-DRIVEN DESIGN
![Page 31: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/31.jpg)
DOMAIN EVENT TIPS
• CONSIDER FOR CASES OF “WHEN THIS HAPPENS, THEN…”
• OR “NOTIFY SOMEONE WHEN…”
• DOMAIN EVENTS REPRESENT THE PAST
• THEY ALREADY HAPPENED
• THUS, THEY SHOULD BE IMMUTABLE
![Page 32: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/32.jpg)
EXAMPLES OF DOMAIN EVENTS
User
Authenticated
Appointment
Confirmed
Payment
Received
$¢£¥
![Page 33: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/33.jpg)
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 IDENTITIES OF ANY ENTITIES INVOLVED
• INITIALIZE ALL STATE IN CONSTRUCTOR
• NO BEHAVIOR OR SIDE EFFECTS – JUST STATE
![Page 34: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/34.jpg)
MORE DDD TOPICS
• AGGREGATES
• REPOSITORIES
• FACTORIES
Learn More:
DDD Fundamentals on Pluralsight
Eric Evans’ DDD Book
Email: [email protected]
![Page 35: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/35.jpg)
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 (CLIENT-SIDE) VIEWMODEL AS WELL
![Page 36: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/36.jpg)
CONTROLLERS
• KEEP AS SMALL AS POSSIBLE
• ELIMINATE BUSINESS LOGIC
• INJECT ALL DEPENDENCIES
• HTTP://DEVIQ.COM/EXPLICIT-DEPENDENCIES-PRINCIPLE
![Page 37: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/37.jpg)
VIEWS
• NO LOGIC UNLESS ENCAPSULATED IN TESTED HELPERS
• NO BUSINESS LOGIC IF IT CAN INSTEAD BE MODELED IN THE DOMAIN
![Page 38: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/38.jpg)
SIGNALR
• AWESOME ADDITION TO ASP.NET
• GREAT FOR NOTIFICATIONS TO MULTIPLE USERS
• TIES IN EASILY WITH DOMAIN EVENTS
• EVENT HANDLERS CAN BE ADDED TO UI PROJECT
![Page 39: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/39.jpg)
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
![Page 40: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/40.jpg)
DEMOPUTTING DDD INTO ASP.NET MVC
![Page 41: Add Some DDD to Your ASP.NET MVC, OK?](https://reader034.fdocuments.net/reader034/viewer/2022042813/547e800db47959b6508b4b57/html5/thumbnails/41.jpg)
Lea
rn M
ore
: