command-query responsibility segregation: теория и практика
TRANSCRIPT
Command / Query ResponsibilitySegregation
теория и практика
О чем пойдет речь?
Немного теории С чего мы начали? Куда мы движемся? Чем пользоваться? Что в итоге?
Теория
Типовые свойства
Бизнес развивается Сложность принятия
решений Новые роли Масштабируемость Старые компоненты Расходы на разработку
С чего все начинают?
DB1 DB2 Services
Domain Model
Application Facade
Service Layer
End User Interface
BackofficeShared Services
С чего все начинают?
С чего все начинают?
Как все заканчивается?
Command / Query Responsibility Segregation
Command / Query Separation
Event Sourcing Task Based User Interface Messaging Domain Driven Design
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE Product
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
Command/Query Separation
Queries Cache
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
Domain Persistence
Command/Query Separation
Queries Cache
Reporting
End User Interface
SELECT * FROM Product UPDATE Product
Domain Persistence
Domain Model
Command/Query Separation
Queries Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToTheCart
INSERT INTO CartINSERT INTO CartItem
Command/Query Separation
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToCart
INSERT INTO CartINSERT INTO CartItem
ProductToCartAdded
Command/Query Separation
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToCart
INSERT INTO CartINSERT INTO CartItem
ProductToCartAdded
INSERT INTO ProductsInCart
Command/Query Separation
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToCart
INSERT INTO CartINSERT INTO CartItem
ProductToCartAdded
INSERT INTO ProductsInCart
SELECT * FROM ProductsInCart
Event Sourcing
Event Sourcing
У Вас на счету: -19435.89₴ КАК?!
Event Sourcing
У Вас на счету: -19435.89₴
Перемещение средств:
Дата Сумма Балланс
Кто Зачем
28.12.2009
10000.00₴
5564.11₴
Работодатель
Премия
29.12.2009
-25000.00₴
-19435.89₴
Я На подарки
Event Sourcing
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..
Events Storage
Event Sourcing
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..
Events Storage
Task Based User Interface1. As a Tourist I want to Book a Hotel
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
BookHotelCommand
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
BookHotelCommand
HotelBooked
Domain Driven Desingn
Ожидайте
Практика
С чего начали мы?
С чего начали мы?
DB1 DB2 Services
Domain Model
Application Facade
Service Layer
End User Interface
BackofficeShared Services
Как это выглядит?
Шаг №1
Database
Domain Model
Application Facade
Service Layer
User Interface
Шаг №1
Database
Domain Model
User Interface
Шаг №2
Database
Domain Model
User Interface
Reports
Шаг №2
Шаг №3
Навигации View Result
В контроллерах нет
Шаг №3
Навигации View Result
В контроллерах нет
Void-методы
В контроллерах остались
Шаг №4
Шаг №4
Шаг №4
Шаг №4
Что дальше? Event Sourcing NoSQL Cloud
Утилиты NServiceBus, MassTransit RavenDb, CouchDb,
MongoDb Lokad.CQRS
Выводы
Вывод всего один
Можно, но осторожно!