49
Command / Query Responsibility Segregation теория и практика

Command-Query Responsibility Segregation: теория и практика

Embed Size (px)

Citation preview

Page 1: Command-Query Responsibility Segregation: теория и практика

Command / Query ResponsibilitySegregation

теория и практика

Page 2: Command-Query Responsibility Segregation: теория и практика

О чем пойдет речь?

Немного теории С чего мы начали? Куда мы движемся? Чем пользоваться? Что в итоге?

Page 3: Command-Query Responsibility Segregation: теория и практика

Теория

Page 4: Command-Query Responsibility Segregation: теория и практика

Типовые свойства

Бизнес развивается Сложность принятия

решений Новые роли Масштабируемость Старые компоненты Расходы на разработку

Page 5: Command-Query Responsibility Segregation: теория и практика

С чего все начинают?

DB1 DB2 Services

Domain Model

Application Facade

Service Layer

End User Interface

BackofficeShared Services

Page 6: Command-Query Responsibility Segregation: теория и практика

С чего все начинают?

Page 7: Command-Query Responsibility Segregation: теория и практика

С чего все начинают?

Page 8: Command-Query Responsibility Segregation: теория и практика

Как все заканчивается?

Page 9: Command-Query Responsibility Segregation: теория и практика

Command / Query Responsibility Segregation

Command / Query Separation

Event Sourcing Task Based User Interface Messaging Domain Driven Design

Page 10: Command-Query Responsibility Segregation: теория и практика

Command/Query Separation

DB

Application Server

End User Interface

SELECT * FROM Product UPDATE Product

Page 11: Command-Query Responsibility Segregation: теория и практика

Command/Query Separation

DB

Application Server

End User Interface

SELECT * FROM Product UPDATE ProductQuery Command

Page 12: Command-Query Responsibility Segregation: теория и практика

Command/Query Separation

DB

Application Server

End User Interface

SELECT * FROM Product UPDATE ProductQuery Command

Page 13: Command-Query Responsibility Segregation: теория и практика

Command/Query Separation

Queries Cache

Application Server

End User Interface

SELECT * FROM Product UPDATE ProductQuery Command

Domain Persistence

Page 14: Command-Query Responsibility Segregation: теория и практика

Command/Query Separation

Queries Cache

Reporting

End User Interface

SELECT * FROM Product UPDATE Product

Domain Persistence

Domain Model

Page 15: Command-Query Responsibility Segregation: теория и практика

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: теория и практика

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: теория и практика

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: теория и практика

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: теория и практика

Event Sourcing

Page 20: Command-Query Responsibility Segregation: теория и практика

Event Sourcing

У Вас на счету: -19435.89₴ КАК?!

Page 21: Command-Query Responsibility Segregation: теория и практика

Event Sourcing

У Вас на счету: -19435.89₴

Перемещение средств:

Дата Сумма Балланс

Кто Зачем

28.12.2009

10000.00₴

5564.11₴

Работодатель

Премия

29.12.2009

-25000.00₴

-19435.89₴

Я На подарки

Page 22: Command-Query Responsibility Segregation: теория и практика

Event Sourcing

View Data Cache

Reporting

End User Interface

Domain Persistence

Domain Model

ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..

Events Storage

Page 23: Command-Query Responsibility Segregation: теория и практика

Event Sourcing

View Data Cache

Reporting

End User Interface

Domain Persistence

Domain Model

ProductToCartAddedProductFromCartRemovedProductQuantityChanged…..

Events Storage

Page 24: Command-Query Responsibility Segregation: теория и практика

Task Based User Interface1. As a Tourist I want to Book a Hotel

Page 25: Command-Query Responsibility Segregation: теория и практика

Task Based User Interface1. As a Tourist I want to Find and Book a Hotel

Page 26: Command-Query Responsibility Segregation: теория и практика

Task Based User Interface1. As a Tourist I want to Find and Book a Hotel

Page 27: Command-Query Responsibility Segregation: теория и практика

Task Based User Interface1. As a Tourist I want to Find and Book a Hotel

Page 28: Command-Query Responsibility Segregation: теория и практика

Messaging

View Data Cache

Domain Model

Events Storage

Book Hotel

Page 29: Command-Query Responsibility Segregation: теория и практика

Messaging

View Data Cache

Domain Model

Events Storage

Book Hotel

BookHotelCommand

Page 30: Command-Query Responsibility Segregation: теория и практика

Messaging

View Data Cache

Domain Model

Events Storage

Book Hotel

BookHotelCommand

HotelBooked

Page 31: Command-Query Responsibility Segregation: теория и практика

Domain Driven Desingn

Ожидайте

Page 32: Command-Query Responsibility Segregation: теория и практика

Практика

Page 33: Command-Query Responsibility Segregation: теория и практика

С чего начали мы?

Page 34: Command-Query Responsibility Segregation: теория и практика

С чего начали мы?

DB1 DB2 Services

Domain Model

Application Facade

Service Layer

End User Interface

BackofficeShared Services

Page 35: Command-Query Responsibility Segregation: теория и практика

Как это выглядит?

Page 36: Command-Query Responsibility Segregation: теория и практика

Шаг №1

Database

Domain Model

Application Facade

Service Layer

User Interface

Page 37: Command-Query Responsibility Segregation: теория и практика

Шаг №1

Database

Domain Model

User Interface

Page 38: Command-Query Responsibility Segregation: теория и практика

Шаг №2

Database

Domain Model

User Interface

Reports

Page 39: Command-Query Responsibility Segregation: теория и практика

Шаг №2

Page 40: Command-Query Responsibility Segregation: теория и практика

Шаг №3

Навигации View Result

В контроллерах нет

Page 41: Command-Query Responsibility Segregation: теория и практика

Шаг №3

Навигации View Result

В контроллерах нет

Void-методы

В контроллерах остались

Page 42: Command-Query Responsibility Segregation: теория и практика

Шаг №4

Page 43: Command-Query Responsibility Segregation: теория и практика

Шаг №4

Page 44: Command-Query Responsibility Segregation: теория и практика

Шаг №4

Page 45: Command-Query Responsibility Segregation: теория и практика

Шаг №4

Page 46: Command-Query Responsibility Segregation: теория и практика

Что дальше? Event Sourcing NoSQL Cloud

Page 47: Command-Query Responsibility Segregation: теория и практика

Утилиты NServiceBus, MassTransit RavenDb, CouchDb,

MongoDb Lokad.CQRS

Page 48: Command-Query Responsibility Segregation: теория и практика

Выводы

Page 49: Command-Query Responsibility Segregation: теория и практика

Вывод всего один

Можно, но осторожно!