Command-Query Responsibility Segregation: теория и практика
-
Upload
kiev-altnet -
Category
Technology
-
view
1.799 -
download
1
Transcript of Command-Query Responsibility Segregation: теория и практика
![Page 1: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/1.jpg)
Command / Query ResponsibilitySegregation
теория и практика
![Page 2: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/2.jpg)
О чем пойдет речь?
Немного теории С чего мы начали? Куда мы движемся? Чем пользоваться? Что в итоге?
![Page 3: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/3.jpg)
Теория
![Page 4: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/4.jpg)
Типовые свойства
Бизнес развивается Сложность принятия
решений Новые роли Масштабируемость Старые компоненты Расходы на разработку
![Page 5: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/5.jpg)
С чего все начинают?
DB1 DB2 Services
Domain Model
Application Facade
Service Layer
End User Interface
BackofficeShared Services
![Page 6: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/6.jpg)
С чего все начинают?
![Page 7: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/7.jpg)
С чего все начинают?
![Page 8: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/8.jpg)
Как все заканчивается?
![Page 9: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/9.jpg)
Command / Query Responsibility Segregation
Command / Query Separation
Event Sourcing Task Based User Interface Messaging Domain Driven Design
![Page 10: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/10.jpg)
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE Product
![Page 11: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/11.jpg)
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
![Page 12: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/12.jpg)
Command/Query Separation
DB
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
![Page 13: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/13.jpg)
Command/Query Separation
Queries Cache
Application Server
End User Interface
SELECT * FROM Product UPDATE ProductQuery Command
Domain Persistence
![Page 14: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/14.jpg)
Command/Query Separation
Queries Cache
Reporting
End User Interface
SELECT * FROM Product UPDATE Product
Domain Persistence
Domain Model
![Page 15: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/15.jpg)
Command/Query Separation
Queries Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToTheCart
INSERT INTO CartINSERT INTO CartItem
![Page 16: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/16.jpg)
Command/Query Separation
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToCart
INSERT INTO CartINSERT INTO CartItem
ProductToCartAdded
![Page 17: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/17.jpg)
Command/Query Separation
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
AddProductToCart
INSERT INTO CartINSERT INTO CartItem
ProductToCartAdded
INSERT INTO ProductsInCart
![Page 18: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/18.jpg)
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
![Page 19: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/19.jpg)
Event Sourcing
![Page 20: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/20.jpg)
Event Sourcing
У Вас на счету: -19435.89₴ КАК?!
![Page 21: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/21.jpg)
Event Sourcing
У Вас на счету: -19435.89₴
Перемещение средств:
Дата Сумма Балланс
Кто Зачем
28.12.2009
10000.00₴
5564.11₴
Работодатель
Премия
29.12.2009
-25000.00₴
-19435.89₴
Я На подарки
![Page 22: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/22.jpg)
Event Sourcing
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..
Events Storage
![Page 23: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/23.jpg)
Event Sourcing
View Data Cache
Reporting
End User Interface
Domain Persistence
Domain Model
ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..
Events Storage
![Page 24: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/24.jpg)
Task Based User Interface1. As a Tourist I want to Book a Hotel
![Page 25: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/25.jpg)
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
![Page 26: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/26.jpg)
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
![Page 27: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/27.jpg)
Task Based User Interface1. As a Tourist I want to Find and Book a Hotel
![Page 28: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/28.jpg)
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
![Page 29: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/29.jpg)
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
BookHotelCommand
![Page 30: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/30.jpg)
Messaging
View Data Cache
Domain Model
Events Storage
Book Hotel
BookHotelCommand
HotelBooked
![Page 31: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/31.jpg)
Domain Driven Desingn
Ожидайте
![Page 32: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/32.jpg)
Практика
![Page 33: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/33.jpg)
С чего начали мы?
![Page 34: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/34.jpg)
С чего начали мы?
DB1 DB2 Services
Domain Model
Application Facade
Service Layer
End User Interface
BackofficeShared Services
![Page 35: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/35.jpg)
Как это выглядит?
![Page 36: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/36.jpg)
Шаг №1
Database
Domain Model
Application Facade
Service Layer
User Interface
![Page 37: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/37.jpg)
Шаг №1
Database
Domain Model
User Interface
![Page 38: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/38.jpg)
Шаг №2
Database
Domain Model
User Interface
Reports
![Page 39: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/39.jpg)
Шаг №2
![Page 40: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/40.jpg)
Шаг №3
Навигации View Result
В контроллерах нет
![Page 41: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/41.jpg)
Шаг №3
Навигации View Result
В контроллерах нет
Void-методы
В контроллерах остались
![Page 42: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/42.jpg)
Шаг №4
![Page 43: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/43.jpg)
Шаг №4
![Page 44: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/44.jpg)
Шаг №4
![Page 45: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/45.jpg)
Шаг №4
![Page 46: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/46.jpg)
Что дальше? Event Sourcing NoSQL Cloud
![Page 47: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/47.jpg)
Утилиты NServiceBus, MassTransit RavenDb, CouchDb,
MongoDb Lokad.CQRS
![Page 48: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/48.jpg)
Выводы
![Page 49: Command-Query Responsibility Segregation: теория и практика](https://reader033.fdocuments.net/reader033/viewer/2022052619/5568a92bd8b42a4c378b4afc/html5/thumbnails/49.jpg)
Вывод всего один
Можно, но осторожно!