SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Рентабельный код
Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы
сделали
Задачи
• Повысить скорость разработки новой функциональности без
ущерба для существующей
• Снизить время подключения нового специалиста
• Повысить bus factor
• Повысить качество планирования, «усреднить»
производительность членов команды
• Снизить количество багов и регрессии в каждой итерации
Обязательно к прочтению
всем ведущим разработчикам
и техническим менеджерам
Интересные факты
• «Сделать продукт» – в 6 раз дольше, чем «написать код»
• Норма рисков в разработке ПО 250%-300% (поэтому нормальный
fixed price – дорогой, а не нормальный – рискованный)
• Код в 10 раз чаще читают, чем пишут
• Производительность разработчиков по разным данным
отличается в 6-28 раз
• Регрессионное тестирование может никогда не закончиться
• Для разработки ПО нет хороших стандартов или ГОСТов
The Blue Book
DDD
B for Behavior
• Вы моделируете предметную модель, а не структуру ORM
• Вы не делаете пустых конструкторов
• Вы не пренебрегаете инкапсуляцией
• Вы определяете поведение, а не структуру хранения
Ключевые термины DDD
• Bounded Context
• Ubiquitous Language
• Entity
• Value Object
• Specification
DDD
• ОЧЕНЬ дорого
• Работает хорошо в устоявшихся бизнес-процессах
• Иногда – это единственный способ сделать то, что нужно
• Плохо масштабируется
• Сложно реализовать в высоконагруженных приложениях
• Плохо работает в стартапах
• Не подходит для построения отчетов
• Требует особого внимания с ORM
• Слова Entity лучше избегать, потому что его все понимают по своему
• С LINQ стандартная реализация Specification «не работает»
CQRS, CQRS, who the f*ck is CQRS?
Вам скорее всего
не нужен Event Sourcing
• Мы вообще не обсуждаем эту тему сегодня, потому что вы скорее
всего не разрабатываете ПО для банка
• А если разрабатываете, то у вас уже есть Audit Log и нет нужды
рассказывать то, что вы уже знаете
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 хранилища данных. Эта одна из возможных реализаций, а не
обязаловка
• Обработчик команды может возвращать значение. Если не согласны
спорьте с Грегом Янгом и Дино Эспозито, а не со мной
• Если обработчик возвращает значение он хуже масштабируется, однако есть
async/await, но надо понимать как они работают
Вопросы

Weitere ähnliche Inhalte

Was ist angesagt?

Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Yulia Tsisyk
 
Шаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияШаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияAlexander Byndyu
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETDev2Dev
 
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...Ontico
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.ScrumTrek
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Badoo Development
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис ТрифоновCodeFest
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсеAlexander Byndyu
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем ТитаренкоCodeFest
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь КашкутаCodeFest
 
Андрей Лузин
Андрей ЛузинАндрей Лузин
Андрей ЛузинCodeFest
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?DotNetConf
 
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...ScrumTrek
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise developmentPavel Tiunov
 
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Ontico
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаAlexander Byndyu
 

Was ist angesagt? (19)

Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
презентация.1
презентация.1презентация.1
презентация.1
 
Шаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияШаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решения
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
 
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис Трифонов
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсе
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
 
Андрей Лузин
Андрей ЛузинАндрей Лузин
Андрей Лузин
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цем...
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise development
 
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продукта
 

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

Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесуAndrey Rebrov
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP Анна Магас
 
5 лекция. презентация
 5 лекция. презентация 5 лекция. презентация
5 лекция. презентацияvyacheslavmaslov
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...Особенности Системного Анализа особо крупных проектов построенных на базе Bus...
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...SQALab
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияNicolay Velizhanin
 
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps_Fest
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Отладка веб-приложений на Javascript
Отладка веб-приложений на JavascriptОтладка веб-приложений на Javascript
Отладка веб-приложений на JavascriptDenis Latushkin
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...HappyDev
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 

Ähnlich wie рентабельный код (20)

Team workflow
Team workflowTeam workflow
Team workflow
 
Scrum Wars
Scrum WarsScrum Wars
Scrum Wars
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесу
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
 
Критерии выбора системы электронного документооборота
Критерии выбора системы электронного документооборотаКритерии выбора системы электронного документооборота
Критерии выбора системы электронного документооборота
 
5 лекция. презентация
 5 лекция. презентация 5 лекция. презентация
5 лекция. презентация
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Sivko
SivkoSivko
Sivko
 
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...Особенности Системного Анализа особо крупных проектов построенных на базе Bus...
Особенности Системного Анализа особо крупных проектов построенных на базе Bus...
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
 
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Отладка веб-приложений на Javascript
Отладка веб-приложений на JavascriptОтладка веб-приложений на Javascript
Отладка веб-приложений на Javascript
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
Автоматизация бизнес-процессов, электронного документооборота и архивного хра...
Автоматизация бизнес-процессов, электронного документооборота и архивного хра...Автоматизация бизнес-процессов, электронного документооборота и архивного хра...
Автоматизация бизнес-процессов, электронного документооборота и архивного хра...
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 

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

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