DDD eXchange 2010: Udi Dahan on Architectural Innovation: CQRS
SESSION CODE: ARC302 Udi Dahan – The Software Simplist Enterprise Development Expert & SOA...
-
Upload
candace-ross -
Category
Documents
-
view
239 -
download
0
Transcript of SESSION CODE: ARC302 Udi Dahan – The Software Simplist Enterprise Development Expert & SOA...
Command/Query Responsibility Segregation
SESSION CODE: ARC302
Udi Dahan – The Software SimplistEnterprise Development Expert & SOA Specialist
Agenda
History Arch. UI Design
Domain Model
History
Paper ruled the world
And then came the computer
And with it data entry
And efficient UIs were designed for it
OrdersID Total Date Shipped Account etc etc
317 $37.87 Sep 1 2010 Yes A17T5
318 $99.99 July 3 2010 Yes A17T5
319 $100.11 Aug 4 2010 Yes P313Z
320 $69.47 Sep 9 2010 No P599Z
CancelSave
Source of truth
Gone…
But the UI lingers to this day
Since then…
Commands
QueriesUsers
Distributed Systems Architecture
Common Distributed Architecture
UI
Services
BL
DAL
DB
Collaboration is good – isn’t it ?
Get dataGet data
Change dataUser is looking at stale data
So why go through all the layers?
UI
Services
BL
DAL
DB
Cache
Why transform between tiers?
Use EF to map from tables to domain objects
Map from DTOs and WS to domain object
Map from DTOs & WS to view model
DBWS
UI
Cache
What was the point of all this again?
Queries – showing data to the user
?
SearchFirst think about what the user wants to find
Avoid Excel-like combo-boxes above each columnDesign some custom widgets/screens for that
Eg. Amazon recommendations
Separate UI talking to different data store
SQL Server Full Text SearchLucene.net
Why not be upfront about staleness?
Data correct as of 10 minutes ago
List of customers
Keep it simple - 2-Tier
Persistent View Model
UI
Query only
For each view in the UI, have a view/table in the DB
2 Layers == 2 Tiers
SELECT * FROM MyTable (WHERE ID = @ID)
Data Duplicated, No Relationships, Data Pre-Calculated
List of customers
Customer Service Rep view
ID Name Phone
List of customers
Supervisor view
ID Name Phone Lifetime value
Rep_Customers_TableID Name Phone
Supervisor_Customers_TableID Name Phone Lifetime Value
Deployment and SecurityDeploy the persistent view model DB to the web tier (only SELECT is permitted)
Don’t have to go through the firewall – faster
Role-based securityDifferent screens for different roles go to different tables – SELECT permissions per role
Just as secure as in-memory cachesIf not more so
Use for preliminary validationBefore going to submit data, check if it already exists in the persistent view model
UniquenessCan expose to user (Yahoo user signup)
Related Entity ExistenceAddress validation – existence of street name
Results in less commands being rejected
Commands – accepting user input
!
Validation and Business RulesValidation: Is the input potentially good?
Structured correctly?Ranges, lengths, etc
Rules: Should we do this?Based on the current system stateWhat the user saw is irrelevant
Command Processing Layers
Input from User
Validation
Rules
Persistence
DB
Transaction
Command Processing Tiers
DBWSInput
Validation Validation
Command
Get current state
Rules
Persist
Should we do what the user asks?
User Interface Design
Traditional User Interfaces
OrdersID Total Date Shipped Account etc etc
317 $37.87 1/9/09 Yes A17T5
318 $99.99 3/7/09 Yes A17T5
319 $100.11 4/8/09 Yes P313Z
320 $69.47 9/9/09 No P599Z
CancelSave
Capturing user intentWhy is it important?
Differentiating between:
Correcting a mistyped shipping addressThe user moved – reroute shipments underway
Sometimes users accidentally modify fields when tabbing between columns
Reservation systems
Reservation systems
Not capturing user intentIn a traditional UI – what we have is the checkbox
Why do users select multiple seats?Because they’re reserving for a family / friends
But then, concurrency happensSomebody else got in first on one of the seats
Try to find a block of seats somewhere else
Capturing user intentGroup reservation:
Small group – sitting togetherLarge group – several small groups
Enter number of peopleEnter preferred seat type – indicates cost
System emails back when reservation can be filledInclude waiting list functionality
Usability benefitsMore users get what they want with less clicks
Scalability benefitsThousands of seats, hundreds of thousands of requests
No need to show actual status
Revisiting the command
!
What’s a good command?The kind you can reply with:
“Thank you. Your confirmation email will arrive shortly”
Inherently asynchronousNot really related to an entity
You need a queue
MSMQOutgoing Incoming
Server
Client
MSMQOutgoing Incoming
Eg. Posting a comment to a blogAfter the browser submits the comment, immediately shows it on the page using AJAX
Eg. Withdrawing cash from an ATMUsing the account information retrieved(Account type, Max single withdrawal)
Decides to send the command (or not)
If so, dispenses cash not waiting for a response
Domain Models
What aren’t they for?Validation
Commands are validated before the domain model is called
Queries
Entity relationships for reading are unnecessary
What are they for?In addition to doing what the command said, doing other things as well
Eg. When a new order is submitted, if the customer has ordered more than X in the past, give them a discount
Only persist what they needThe domain model isn’t responsible for persisting all data
only what it needs for its purposes
The rest of the world is using the data in the query store anyway
Putting it all together
For better scalability, add pub/sub
Queries
CommandsDB
WSInput
Validation Validation
Rules
QueriesView Model
View ModelUpdater
Publish
Client
Data from input immediately overlaid on queries
In Closing
SummaryKeep queries simple – 2-Tier if possible
No data transfer objects
Have commands reflect user intentAdjust UI design to capture intent
Get the benefits of asynchronous programmingSimple validation, focused business rules
Thank youUdi Dahan – The Software SimplistEnterprise Development Expert & SOA Specialist
SESSION CODE: ARC302
Resources
www.microsoft.com/teched
Sessions On-Demand & Community Microsoft Certification & Training Resources
Resources for IT Professionals Resources for Developers
www.microsoft.com/learning
http://microsoft.com/technet http://microsoft.com/msdn
Learning
Complete an evaluation on CommNet and enter to win!
Sign up for Tech·Ed 2011 and save $500 starting June 8 – June 31st
http://northamerica.msteched.com/registration
You can also register at the
North America 2011 kiosk located at registrationJoin us in Atlanta next year
© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to
be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
JUNE 7-10, 2010 | NEW ORLEANS, LA