Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Рентабельный код
Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы
сделали
Задачи
• Повысить скорость разработки новой функциональности без
ущерба для существующей
• Снизить время подключения новог...
Обязательно к прочтению
всем ведущим разработчикам
и техническим менеджерам
Интересные факты
• «Сделать продукт» – в 6 раз дольше, чем «написать код»
• Норма рисков в разработке ПО 250%-300% (поэтом...
The Blue Book
DDD
B for Behavior
• Вы моделируете предметную модель, а не структуру ORM
• Вы не делаете пустых конструкторов
• Вы не пренебр...
Ключевые термины DDD
• Bounded Context
• Ubiquitous Language
• Entity
• Value Object
• Specification
DDD
• ОЧЕНЬ дорого
• Работает хорошо в устоявшихся бизнес-процессах
• Иногда – это единственный способ сделать то, что нуж...
CQRS, CQRS, who the f*ck is CQRS?
Вам скорее всего
не нужен Event Sourcing
• Мы вообще не обсуждаем эту тему сегодня, потому что вы скорее
всего не разрабат...
CQRS –более простой способ делать
то, что вы уже умеете
In / Out
• Принимает на вход и возвращает DTO (желательно immutable), а
не доменные объекты
• В отсутствии команд Query вс...
Как называется?
• Side-effect-free
• Immutable
• Может компоноваться
CQRS over HTTP
• GET– это Query
• POST/PUT/PATCH/DELETE – это Command
CQRS
• Event Sourcing требует CQRS, но не наоборот
• Дешево
• Подходит везде
• Масштабируется
• Не требует 2 хранилища дан...
Вопросы
рентабельный код
Upcoming SlideShare
Loading in …5
×

рентабельный код

22,626 views

Published on

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

  • Be the first to comment

рентабельный код

  1. 1. Рентабельный код Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали
  2. 2. Задачи • Повысить скорость разработки новой функциональности без ущерба для существующей • Снизить время подключения нового специалиста • Повысить bus factor • Повысить качество планирования, «усреднить» производительность членов команды • Снизить количество багов и регрессии в каждой итерации
  3. 3. Обязательно к прочтению всем ведущим разработчикам и техническим менеджерам
  4. 4. Интересные факты • «Сделать продукт» – в 6 раз дольше, чем «написать код» • Норма рисков в разработке ПО 250%-300% (поэтому нормальный fixed price – дорогой, а не нормальный – рискованный) • Код в 10 раз чаще читают, чем пишут • Производительность разработчиков по разным данным отличается в 6-28 раз • Регрессионное тестирование может никогда не закончиться • Для разработки ПО нет хороших стандартов или ГОСТов
  5. 5. The Blue Book
  6. 6. DDD
  7. 7. B for Behavior • Вы моделируете предметную модель, а не структуру ORM • Вы не делаете пустых конструкторов • Вы не пренебрегаете инкапсуляцией • Вы определяете поведение, а не структуру хранения
  8. 8. Ключевые термины DDD • Bounded Context • Ubiquitous Language • Entity • Value Object • Specification
  9. 9. DDD • ОЧЕНЬ дорого • Работает хорошо в устоявшихся бизнес-процессах • Иногда – это единственный способ сделать то, что нужно • Плохо масштабируется • Сложно реализовать в высоконагруженных приложениях • Плохо работает в стартапах • Не подходит для построения отчетов • Требует особого внимания с ORM • Слова Entity лучше избегать, потому что его все понимают по своему • С LINQ стандартная реализация Specification «не работает»
  10. 10. CQRS, CQRS, who the f*ck is CQRS?
  11. 11. Вам скорее всего не нужен Event Sourcing • Мы вообще не обсуждаем эту тему сегодня, потому что вы скорее всего не разрабатываете ПО для банка • А если разрабатываете, то у вас уже есть Audit Log и нет нужды рассказывать то, что вы уже знаете
  12. 12. CQRS –более простой способ делать то, что вы уже умеете
  13. 13. In / Out • Принимает на вход и возвращает DTO (желательно immutable), а не доменные объекты • В отсутствии команд Query всегда возвращает одинаковый результат • Команды изменяют состояние системы
  14. 14. Как называется? • Side-effect-free • Immutable • Может компоноваться
  15. 15. CQRS over HTTP • GET– это Query • POST/PUT/PATCH/DELETE – это Command
  16. 16. CQRS • Event Sourcing требует CQRS, но не наоборот • Дешево • Подходит везде • Масштабируется • Не требует 2 хранилища данных. Эта одна из возможных реализаций, а не обязаловка • Обработчик команды может возвращать значение. Если не согласны спорьте с Грегом Янгом и Дино Эспозито, а не со мной • Если обработчик возвращает значение он хуже масштабируется, однако есть async/await, но надо понимать как они работают
  17. 17. Вопросы

×