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