18
Рентабельный код Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

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

Embed Size (px)

Citation preview

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

Рентабельный кодКак мы попробовали DDD, CQRS и Event Sourcing и какие выводы

сделали

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

Задачи

• Повысить скорость разработки новой функциональности без ущерба для существующей• Снизить время подключения нового специалиста• Повысить bus factor• Повысить качество планирования, «усреднить»

производительность членов команды• Снизить количество багов и регрессии в каждой итерации

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

Обязательно к прочтениювсем ведущим разработчиками техническим менеджерам

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

Интересные факты

• «Сделать продукт» – в 6 раз дольше, чем «написать код»• Норма рисков в разработке ПО 250%-300% (поэтому нормальный

fixed price – дорогой, а не нормальный – рискованный)• Код в 10 раз чаще читают, чем пишут• Производительность разработчиков по разным данным

отличается в 6-28 раз• Регрессионное тестирование может никогда не закончиться• Для разработки ПО нет хороших стандартов или ГОСТов

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

The Blue Book

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

DDD

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

B for Behavior

• Вы моделируете предметную модель, а не структуру ORM• Вы не делаете пустых конструкторов• Вы не пренебрегаете инкапсуляцией• Вы определяете поведение, а не структуру хранения

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

Ключевые термины DDD

• Bounded Context• Ubiquitous Language• Entity• Value Object• Specification

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

DDD

• ОЧЕНЬ дорого• Работает хорошо в устоявшихся бизнес-процессах• Иногда – это единственный способ сделать то, что нужно• Плохо масштабируется• Сложно реализовать в высоконагруженных приложениях• Плохо работает в стартапах• Не подходит для построения отчетов• Требует особого внимания с ORM• Слова Entity лучше избегать, потому что его все понимают по своему• С LINQ стандартная реализация Specification «не работает»

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

CQRS, CQRS, who the f*ck is CQRS?

Page 11: рентабельный код
Page 12: рентабельный код

Вам скорее всегоне нужен Event Sourcing

• Мы вообще не обсуждаем эту тему сегодня, потому что вы скорее всего не разрабатываете ПО для банка• А если разрабатываете, то у вас уже есть Audit Log и нет нужды

рассказывать то, что вы уже знаете

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

CQRS –более простой способ делать то, что вы уже

умеете

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

In / Out

• Принимает на вход и возвращает DTO (желательно immutable), а не доменные объекты• В отсутствии команд Query всегда возвращает одинаковый

результат• Команды изменяют состояние системы

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

Как называется?

• Side-effect-free• Immutable• Может компоноваться

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

CQRS over HTTP

• GET– это Query• POST/PUT/PATCH/DELETE – это Command

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

CQRS

• Event Sourcing требует CQRS, но не наоборот• Дешево• Подходит везде• Масштабируется• Не требует 2 хранилища данных. Эта одна из возможных реализаций, а не обязаловка• Обработчик команды может возвращать значение. Если не согласны спорьте с

Грегом Янгом и Дино Эспозито, а не со мной• Если обработчик возвращает значение он хуже масштабируется, однако есть

async/await, но надо понимать как они работают

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

Вопросы