
Книга посвящена методологии DDD (предметно-ориентированному проектированию), что особенно актуально в условиях дробления предметных областей и усложнения бизнес-взаимодействий. Рассказано, как оценить масштаб и сложность предметной области, измерить темпы её развития, учесть необходимые зависимости, применять событийно-ориентированную архитектуру и структурировать создаваемое ПО, эффективно вписывая его в сеть данных (Data Mesh). Материал будет особенно интересен при развитии стартапа и разработке наукоёмких отраслевых систем.
Для архитекторов ПО, бизнес-аналитиков и разработчиков корпоративного программного обеспечения
Сегодня создавать программное обеспечение стало сложно как никогда. Приходится не только учитывать постоянно меняющиеся технологические тренды, но и понимать ту предметную область (бизнес), для которой оно создаётся.
В этой практичной книге приведён ключевой набор паттернов, принципов и практик для анализа предметной области, понимания стратегий бизнеса и, что самое важное, соотнесение процесса разработки с меняющимися потребностями заказчика.
Автор показывает, как при помощи этих практик надёжно реализовать бизнес-логику, а также обеспечить прочность программной архитектуры на годы вперёд. Вы исследуете, как предметно-ориентированное проектирование (DDD – domain-driven design) соотносится с другими методологиями, и гарантируете, что принимаемые архитектурные решения соответствуют предъявляемым бизнес-требованиям. В книге подробно разобрано внедрение DDD в рамках стартапа.
Вы узнаете, как
- Проанализировать предметную область, в которой работает компания, и определить, как создаваемая система вписывается в эту область и обеспечивает конкурентное преимущество
- Пользоваться стратегическими и тактическими средствами DDD для выстраивания эффективных программных решений, удовлетворяющих потребности заказчика
- Приходить к общему пониманию любой предметной области, с которой приходится иметь дело
- Разбивать систему на ограниченные контексты
- Координировать работу сразу нескольких команд
- Постепенно вводить DDD в реорганизуемые проекты
Владик Хононов – уникальный мыслитель, много лет занимающийся внедрением DDD для решения задач в самых разных предметных областях. Его идеи – постоянный источник вдохновения, подпитывающий всё сообщество DDD, а эта книга станет незаменимым ресурсом для всех, кто только начинает практиковать DDD.
Ник Тьюн, технологический консультант в компании Empathy Software, автор книги «Modernizing Architecture»
Книгу “Изучаем DDD – предметно-ориентированное проектирование” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие редакторской группы……………………………………………………….. 15
Предисловие…………………………………………………………………………………………… 19
Введение………………………………………………………………………………………………… 21
Зачем я написал эту книгу………………………………………………………………………………………………………… 22
Кому следует прочитать эту книгу………………………………………………………………………………………….. 22
Навигация по книге……………………………………………………………………………………………………………………. 23
Пример предметной области: WolfDesk………………………………………………………………………………….. 24
Соглашения, используемые в этой книге…………………………………………………………………………………. 25
Порядок использования примеров кода…………………………………………………………………………………… 26
Благодарности…………………………………………………………………………………………………………………………… 27
Вступление…………………………………………………………………………………………….. 29
Часть I. Стратегическое проектирование……………………………. 31
Глава 1. Анализ предметной области……………………………………………………… 33
Так что же такое предметная область?……………………………………………………………………………………. 33
Что такое поддомен (subdomain)?……………………………………………………………………………………………. 34
Типы поддоменов……………………………………………………………………………………………………………. 34
Основные поддомены (core subdomains)………………………………………………………………. 34
Универсальные поддомены (generic subdomains)………………………………………………… 36
Вспомогательные поддомены (supporting subdomains)………………………………………. 36
Сравнение поддоменов………………………………………………………………………………………………….. 37
Конкурентное преимущество………………………………………………………………………………… 37
Сложность………………………………………………………………………………………………………………. 38
Изменчивость………………………………………………………………………………………………………….. 39
Стратегия решения (solution)…………………………………………………………………………………. 40
Определение границ поддоменов………………………………………………………………………………….. 41
Выделение поддоменов (Distilling subdomains)……………………………………………………. 42
Поддомены с позиции согласующихся сценариев использования……………………. 42
Сосредоточьтесь на главном………………………………………………………………………………… 44
Примеры анализа предметной области…………………………………………………………………………………… 44
Gigmaster………………………………………………………………………………………………………………………….. 44
Предметная область (домен) и поддомены………………………………………………………….. 45
Архитектурные решения……………………………………………………………………………………….. 45
BusVNext…………………………………………………………………………………………………………………………. 46
Предметная область (домен) и поддомены………………………………………………………….. 46
Архитектурные решения……………………………………………………………………………………….. 47
Кто такие специалисты в предметной области?…………………………………………………………………….. 47
Выводы……………………………………………………………………………………………………………………………………….. 48
Упражнения………………………………………………………………………………………………………………………………… 49
Глава 2. Экспертные знания о предметной области……………………………….. 50
Задачи бизнеса (business problems)………………………………………………………………………………………….. 50
Выявление экспертных знаний…………………………………………………………………………………………………. 51
Общение……………………………………………………………………………………………………………………………………… 51
Что такое единый язык?…………………………………………………………………………………………………………….. 53
Язык бизнеса………………………………………………………………………………………………………………………………. 54
Сценарии…………………………………………………………………………………………………………………………. 54
Согласованность…………………………………………………………………………………………………………….. 55
Неоднозначные понятия………………………………………………………………………………………… 55
Понятия-синонимы…………………………………………………………………………………………………. 55
Модель предметной области……………………………………………………………………………………………………. 56
Что такое модель?…………………………………………………………………………………………………………… 56
Эффективное моделирование………………………………………………………………………………………… 56
Моделирование предметной области…………………………………………………………………………… 57
Непрерывная работа……………………………………………………………………………………………………… 57
Инструменты…………………………………………………………………………………………………………………… 58
Сложности………………………………………………………………………………………………………………………. 59
Вывод………………………………………………………………………………………………………………………………………….. 60
Упражнения………………………………………………………………………………………………………………………………… 61
Глава 3. Как осмыслить сложность предметной области……………………….. 62
Противоречивые модели…………………………………………………………………………………………………………… 62
Что такое ограниченный контекст?………………………………………………………………………………………….. 64
Границы модели……………………………………………………………………………………………………………… 65
Уточнение термина «единый язык»………………………………………………………………………………. 65
Область применения ограниченного контекста…………………………………………………………… 66
Сравнение ограниченных контекстов и поддоменов……………………………………………………………… 67
Поддомены………………………………………………………………………………………………………………………. 67
Ограниченные контексты………………………………………………………………………………………………. 68
Взаимодействие поддоменов и ограниченных контекстов…………………………………………. 68
Границы……………………………………………………………………………………………………………………………………… 70
Физические границы………………………………………………………………………………………………………. 70
Границы владения………………………………………………………………………………………………………….. 70
Ограниченные контексты в реальной жизни…………………………………………………………………………… 71
Семантические области…………………………………………………………………………………………………. 71
Наука……………………………………………………………………………………………………………………………….. 72
Покупка холодильника………………………………………………………………………………………………….. 73
Вывод………………………………………………………………………………………………………………………………………….. 75
Упражнения………………………………………………………………………………………………………………………………… 75
Глава 4. Интеграция ограниченных контекстов…………………………………….. 77
Сотрудничество (Cooperation)………………………………………………………………………………………………….. 77
Партнерство (Partnership)………………………………………………………………………………………………. 78
Общее ядро (shared kernel)……………………………………………………………………………………………… 78
Общие рамки (Shared scope)………………………………………………………………………………….. 79
Реализация………………………………………………………………………………………………………………. 79
Когда следует воспользоваться общим ядром…………………………………………………….. 80
Потребитель-Поставщик (Customer-supplier)…………………………………………………………………………… 81
Конформист (Conformist)……………………………………………………………………………………………….. 81
Предохранительный слой (Anticorruption layer)………………………………………………………….. 82
Сервис с открытым протоколом (Open-Host Service)…………………………………………………… 83
Разные пути (Separate Ways)…………………………………………………………………………………………………….. 84
Проблемы общения………………………………………………………………………………………………………… 84
Универсальный поддомен (Generic Subdomain)…………………………………………………………… 84
Различия в моделях………………………………………………………………………………………………………… 85
Карта контекстов (Context Map)………………………………………………………………………………………………. 85
Поддержка в актуальном состоянии…………………………………………………………………………….. 86
Ограничения……………………………………………………………………………………………………………………. 86
Вывод………………………………………………………………………………………………………………………………………….. 87
Упражнения………………………………………………………………………………………………………………………………… 87
Часть II. Тактический замысел………………………………………………… 89
Глава 5. Реализация простой бизнес-логики………………………………………….. 90
Транзакционный сценарий……………………………………………………………………………………………………….. 90
Реализация………………………………………………………………………………………………………………………. 91
Это не так-то просто!……………………………………………………………………………………………………… 91
Отсутствие транзакционного поведения……………………………………………………………… 91
Распределенные транзакции…………………………………………………………………………………. 93
Неявные распределенные транзакции…………………………………………………………………. 94
Когда следует применять транзакционный сценарий………………………………………………… 96
Активная запись…………………………………………………………………………………………………………………………. 97
Реализация………………………………………………………………………………………………………………………. 97
Когда следует применять активную запись…………………………………………………………………. 98
Придерживайтесь прагматичного подхода…………………………………………………………………………….. 99
Вывод………………………………………………………………………………………………………………………………………….. 99
Упражнения……………………………………………………………………………………………………………………………… 100
Глава 6. Проработка сложной бизнес-логики……………………………………….. 102
Предыстория…………………………………………………………………………………………………………………………….. 102
Модель предметной области (доменная модель)…………………………………………………………………. 102
Реализация…………………………………………………………………………………………………………………….. 103
Сложность…………………………………………………………………………………………………………….. 104
Единый язык………………………………………………………………………………………………………….. 104
Строительные блоки…………………………………………………………………………………………………….. 104
Объект-значение…………………………………………………………………………………………………… 104
Сущности………………………………………………………………………………………………………………. 110
Агрегаты……………………………………………………………………………………………………………….. 111
Доменные сервисы (domain service)……………………………………………………………………. 119
Управление сложностью……………………………………………………………………………………………… 121
Вывод………………………………………………………………………………………………………………………………………… 122
Упражнения……………………………………………………………………………………………………………………………… 123
Глава 7. Моделирование фактора времени…………………………………………… 125
События как источник данных (Event Sourcing)……………………………………………………………………. 125
Поиск……………………………………………………………………………………………………………………………… 130
Анализ……………………………………………………………………………………………………………………………. 132
Источник истины………………………………………………………………………………………………………….. 133
Хранилище событий…………………………………………………………………………………………………….. 133
Модель предметной области, основанная на событиях………………………………………………………. 134
Преимущества………………………………………………………………………………………………………………. 137
Недостатки……………………………………………………………………………………………………………………. 138
Часто задаваемые вопросы…………………………………………………………………………………………………….. 139
Производительность…………………………………………………………………………………………………….. 139
Удаление данных…………………………………………………………………………………………………………. 141
А почему просто нельзя ………………………………………………………………………………………………. 141
Вывод………………………………………………………………………………………………………………………………………… 142
Упражнения……………………………………………………………………………………………………………………………… 142
Глава 8. Архитектурные паттерны……………………………………………………….. 144
Сопоставление бизнес-логики и архитектурных паттернов……………………………………………….. 144
Слоеная архитектура (Layered Architecture)…………………………………………………………………………. 145
Слой представления (Presentation layer)…………………………………………………………………….. 145
Слой бизнес-логики (Business logic layer)……………………………………………………………………. 146
Слой доступа к данным (Data access layer)………………………………………………………………… 146
Связь между слоями……………………………………………………………………………………………………… 147
Вариация……………………………………………………………………………………………………………………….. 148
Сервисный слой (Service layer)……………………………………………………………………………. 148
Терминология……………………………………………………………………………………………………….. 151
Когда предпочтительнее использовать слоеную архитектуру……………………………….. 151
Дополнительно: сравнение слоев и уровней……………………………………………………… 152
Порты и адаптеры (Ports and adapters)………………………………………………………………………………….. 152
Терминология……………………………………………………………………………………………………………….. 152
Принцип инверсии зависимостей (Dependency inversion principle)…………………………… 153
Интеграция инфраструктурных компонентов……………………………………………………………. 154
Варианты………………………………………………………………………………………………………………………. 155
Когда предпочтительнее использовать порты и адаптеры……………………………………… 155
Разделение ответственности команд и запросов (Command-Query Responsibility Segregation) 155
Мультипарадигменное моделирование (Polyglot modelling)…………………………………….. 156
Реализация…………………………………………………………………………………………………………………….. 156
Модель выполнения команд……………………………………………………………………………….. 157
Модели чтения (проекции)………………………………………………………………………………….. 157
Проецирование моделей чтения………………………………………………………………………………….. 157
Синхронные проекции…………………………………………………………………………………………. 158
Асинхронные проекции……………………………………………………………………………………….. 159
Сложности…………………………………………………………………………………………………………………….. 160
Разделение моделей……………………………………………………………………………………………………… 160
Когда предпочтительнее использовать CQRS…………………………………………………………… 160
Область применения………………………………………………………………………………………………………………… 161
Вывод………………………………………………………………………………………………………………………………………… 162
Упражнения……………………………………………………………………………………………………………………………… 163
Глава 9. Паттерны взаимодействия……………………………………………………… 164
Преобразование моделей………………………………………………………………………………………………………… 164
Преобразование моделей без сохранения состояния……………………………………………….. 165
Синхронный режим……………………………………………………………………………………………… 165
Асинхронный режим……………………………………………………………………………………………. 167
Преобразование моделей с отслеживанием состояния…………………………………………….. 168
Агрегирование входящих данных………………………………………………………………………. 168
Объединение нескольких источников………………………………………………………………… 169
Интеграция агрегатов……………………………………………………………………………………………………………… 170
Паттерн исходящих сообщений (Outbox)…………………………………………………………………… 172
Извлечение неопубликованных событий…………………………………………………………… 173
Сага……………………………………………………………………………………………………………………………….. 174
Согласованность………………………………………………………………………………………………….. 177
Диспетчер процессов……………………………………………………………………………………………………. 177
Вывод………………………………………………………………………………………………………………………………………… 180
Упражнения……………………………………………………………………………………………………………………………… 181
Часть III. Применение предметно-ориентированного проектирования на практике………………………………………………………………………………………….. 183
Глава 10. Эвристика проектирования………………………………………………….. 184
Эвристика…………………………………………………………………………………………………………………………………. 184
Ограниченные контексты………………………………………………………………………………………………………… 184
Паттерны реализации бизнес-логики…………………………………………………………………………………….. 186
Архитектурные паттерны……………………………………………………………………………………………………….. 188
Стратегия тестирования………………………………………………………………………………………………………….. 189
Пирамида тестирования………………………………………………………………………………………………. 190
Ромб тестирования……………………………………………………………………………………………………….. 190
Перевернутая пирамида тестирования………………………………………………………………………. 190
Дерево тактических проектных решений………………………………………………………………………………. 191
Вывод………………………………………………………………………………………………………………………………………… 192
Упражнения……………………………………………………………………………………………………………………………… 192
Глава 11. Эволюция проектных решений…………………………………………….. 194
Изменения в предметных областях………………………………………………………………………………………… 194
Из основного в универсальный……………………………………………………………………………………. 195
Из универсального в основной……………………………………………………………………………………. 195
Из вспомогательного в универсальный………………………………………………………………………. 196
Из вспомогательного в основной………………………………………………………………………………… 196
Из основного во вспомогательный……………………………………………………………………………… 196
Из универсального во вспомогательный……………………………………………………………………. 196
Стратегические аспекты проектирования…………………………………………………………………………….. 197
Тактические аспекты проектирования…………………………………………………………………………………… 198
Преобразование транзакционного сценария в активную запись…………………………….. 198
Преобразование активной записи в модель предметной области…………………………… 199
Преобразование модели предметной области в модель предметной области, основанную на событиях 200
Генерация прошлых переходов состояния………………………………………………………………… 201
Моделирование событий миграции……………………………………………………………………………. 202
Организационные изменения………………………………………………………………………………………………….. 202
Переход от партнерства к отношениям потребитель-поставщик……………………………. 203
Переход от отношений потребитель-поставщик к модели разных путей……………….. 204
Знания предметной области…………………………………………………………………………………………………… 204
Рост проекта…………………………………………………………………………………………………………………………….. 205
Поддомены……………………………………………………………………………………………………………………. 205
Ограниченные контексты…………………………………………………………………………………………….. 206
Агрегаты………………………………………………………………………………………………………………………… 207
Вывод………………………………………………………………………………………………………………………………………… 207
Упражнения……………………………………………………………………………………………………………………………… 208
Глава 12. EventStorming……………………………………………………………………….. 210
Что такое EventStorming?………………………………………………………………………………………………………… 210
Кто принимает участие в EventStorming?……………………………………………………………………………… 210
Что нужно для проведения EventStorming?…………………………………………………………………………… 211
Процесс проведения EventStorming……………………………………………………………………………………….. 212
Этап 1: Проведение неструктурированного исследования……………………………………… 212
Этап 2: Выстраивание в хронологическом порядке…………………………………………………. 213
Этап 3: Проблемные места (pain points)…………………………………………………………………….. 213
Этап 4: Выявление ключевых событий (pivotal events)…………………………………………….. 214
Этап 5: Выявление команд (commands)…………………………………………………………………….. 215
Этап 6: Выявление правил (policies)……………………………………………………………………………. 216
Этап 7: Выявление моделей чтения (read model)………………………………………………………. 217
Этап 8: Выявление внешних систем (external systems)……………………………………………… 217
Этап 9: Выявление агрегатов………………………………………………………………………………………. 218
Этап 10: Выявление ограниченных контекстов………………………………………………………… 218
Варианты………………………………………………………………………………………………………………………………….. 219
Когда следует проводить EventStorming……………………………………………………………………………….. 220
Советы по проведению……………………………………………………………………………………………………………. 221
Отслеживание динамики проведения семинара………………………………………………………… 221
Проведение EventStorming с удаленными участниками…………………………………………… 222
Вывод………………………………………………………………………………………………………………………………………… 222
Упражнения……………………………………………………………………………………………………………………………… 222
Глава 13. Предметно-ориентированное проектирование на практике….. 224
Стратегический анализ…………………………………………………………………………………………………………… 225
Осмысление предметной области……………………………………………………………………………….. 225
Основные поддомены (core subdomains)……………………………………………………………. 225
Универсальные поддомены…………………………………………………………………………………. 226
Вспомогательные поддомены (supporting subdomains)…………………………………….. 226
Изучение текущего проекта…………………………………………………………………………………………. 226
Оценка тактического замысла…………………………………………………………………………….. 227
Оценка стратегического замысла……………………………………………………………………….. 227
Определение стратегии модернизации………………………………………………………………………………….. 228
Стратегическая модернизация……………………………………………………………………………………. 228
Тактическая модернизация………………………………………………………………………………………….. 230
Развитие единого языка……………………………………………………………………………………………….. 230
Паттерн «Душитель» (Strangler)………………………………………………………………………….. 231
Рефакторинг тактических проектных решений…………………………………………………. 233
Прагматичное предметно-ориентированное проектирование……………………………………………. 234
Как «продать» предметно-ориентированное проектирование?………………………………………….. 234
Законспирированное предметно-ориентированное проектирование……………………… 235
Единый язык………………………………………………………………………………………………………….. 235
Ограниченные контексты…………………………………………………………………………………….. 236
Тактические проектные решения………………………………………………………………………… 236
Модель предметной области, основанная на событиях…………………………………… 237
Вывод………………………………………………………………………………………………………………………………………… 237
Упражнения……………………………………………………………………………………………………………………………… 238
Часть IV. Взаимоотношения с другими методологиями и паттернами 239
Глава 14. Микросервисы……………………………………………………………………… 240
Что такое сервис?…………………………………………………………………………………………………………………….. 240
Что такое микросервис?………………………………………………………………………………………………………….. 241
Метод как Сервис (Method as a Service): путь к созданию идеальных микросервисов? 242
Цель проектирования…………………………………………………………………………………………………… 243
Сложность системы……………………………………………………………………………………………………… 244
Микросервисы как «глубокие» сервисы (deep services)…………………………………………….. 245
Микросервисы как глубокие модули………………………………………………………………………….. 246
Предметно-ориентированное проектирование и границы микросервисов………………………… 248
Ограниченные контексты…………………………………………………………………………………………….. 248
Агрегаты……………………………………………………………………………………………………………….. 250
Поддомены……………………………………………………………………………………………………………………. 251
Сокращение публичных интерфейсов микросервисов…………………………………………………………. 252
Сервис с открытым протоколом………………………………………………………………………………….. 252
Предохранительный слой (anticorruption layer, ACL)……………………………………………….. 253
Вывод………………………………………………………………………………………………………………………………………… 254
Упражнения……………………………………………………………………………………………………………………………… 254
Глава 15. Событийно-ориентированная архитектура…………………………… 256
Событийно-ориентированная архитектура………………………………………………………………………….. 256
События……………………………………………………………………………………………………………………………………. 257
События, команды и сообщения…………………………………………………………………………………. 257
Структура……………………………………………………………………………………………………………………… 258
Типы событий……………………………………………………………………………………………………………….. 258
Уведомление…………………………………………………………………………………………………………. 258
Передача состояния с помощью события………………………………………………………….. 260
События предметной области (domain event)…………………………………………………… 262
Сравнение событий предметной области и уведомлений………………………………… 262
Сравнение событий предметной области с ECST-сообщениями…………………….. 262
Типы событий: Пример………………………………………………………………………………………… 263
Проектирование событийно-ориентированной интеграции……………………………………………….. 264
Распределенный большой ком грязи…………………………………………………………………………… 264
Временнáя связанность (связанность по времени)…………………………………………………….. 265
Функциональная связанность……………………………………………………………………………………… 266
Связанность на уровне реализации……………………………………………………………………………. 266
Реорганизация событийно-ориентированной интеграции……………………………………….. 266
Творческий подход к событийно-ориентированному проектированию…………………. 267
Предполагайте худшее………………………………………………………………………………………… 267
Используйте публичный интерфейс и приватные события……………………………… 268
Оценивайте требования к согласованности………………………………………………………. 268
Вывод………………………………………………………………………………………………………………………………………… 269
Упражнения……………………………………………………………………………………………………………………………… 269
Глава 16. Сеть данных (Data Mesh)………………………………………………………. 271
Сравнение аналитической модели данных (OLAP) с моделью транзакционных данных (OLTP) 271
Таблица фактов…………………………………………………………………………………………………………….. 272
Таблица измерений………………………………………………………………………………………………………. 274
Аналитические модели………………………………………………………………………………………………… 274
Платформы управления аналитическими данными…………………………………………………………….. 276
Хранилище данных — Data Warehouse……………………………………………………………………… 276
Озеро данных — Data Lake…………………………………………………………………………………………. 279
Проблемы архитектур хранилища данных и озера данных……………………………………. 280
Сеть данных (Data mesh)………………………………………………………………………………………………………… 281
Разбиение данных по предметным областям…………………………………………………………….. 281
Данные как продукт……………………………………………………………………………………………………… 283
Обеспечение автономии………………………………………………………………………………………………. 284
Построение экосистемы……………………………………………………………………………………………….. 284
Совмещение сети данных (data mesh) и предметно-ориентированного проектирования 285
Вывод………………………………………………………………………………………………………………………………………… 287
Упражнения……………………………………………………………………………………………………………………………… 287
Заключение………………………………………………………………………………………….. 289
Задача………………………………………………………………………………………………………………………………………. 289
Решение…………………………………………………………………………………………………………………………………….. 290
Реализация……………………………………………………………………………………………………………………………….. 291
Рекомендуемая литература…………………………………………………………………………………………………….. 291
Дополнительные сведения о предметно-ориентированном проектировании………… 291
Архитектурные и интеграционные шаблоны…………………………………………………………….. 292
Модернизация устаревших систем…………………………………………………………………………….. 292
EventStorming………………………………………………………………………………………………………………… 293
Вывод………………………………………………………………………………………………………………………………………… 294
Приложение 1. Применение DDD: пример из практики………………………… 295
Пять ограниченных контекстов………………………………………………………………………………………………. 295
Предметная область…………………………………………………………………………………………………….. 295
Ограниченный контекст № 1: Маркетинг…………………………………………………………………… 297
Своеобразная магия…………………………………………………………………………………………….. 297
Наши ранние взгляды на предметно-ориентированное проектирование………. 297
Ограниченный контекст № 2: CRM…………………………………………………………………………….. 297
Еще больше «агрегатов»!…………………………………………………………………………………….. 298
Разработка решения: Дубль два…………………………………………………………………………. 299
Вавилонская башня 2.0……………………………………………………………………………………….. 299
Более широкий взгляд на предметно-ориентированное проектирование………. 300
Ограниченный контекст № 3: Обработчики событий……………………………………………….. 301
Ограниченный контекст № 4: Бонусы………………………………………………………………………… 302
Проектирование: Дубль два………………………………………………………………………………… 303
Единый язык………………………………………………………………………………………………………….. 303
Классическое понимание предметно-ориентированного проектирования……. 303
Ограниченный контекст № 5: Центр маркетинга………………………………………………………. 304
Микро — что?………………………………………………………………………………………………………. 304
Реальная проблема………………………………………………………………………………………………. 305
Обсуждение………………………………………………………………………………………………………………………………. 305
Единый язык………………………………………………………………………………………………………………….. 305
Поддомены……………………………………………………………………………………………………………………. 306
Сопоставление проектных решений с поддоменами………………………………………… 307
Не игнорируйте боль……………………………………………………………………………………………. 308
Границы ограниченных контекстов……………………………………………………………………………. 308
Вывод………………………………………………………………………………………………………………………………………… 309
Приложение 2. Ответы на вопросы упражнений………………………………….. 310
Глава 1……………………………………………………………………………………………………………………………………… 310
Глава 2……………………………………………………………………………………………………………………………………… 311
Глава 3……………………………………………………………………………………………………………………………………… 311
Глава 4……………………………………………………………………………………………………………………………………… 312
Глава 5……………………………………………………………………………………………………………………………………… 312
Глава 6……………………………………………………………………………………………………………………………………… 313
Глава 7……………………………………………………………………………………………………………………………………… 313
Глава 8……………………………………………………………………………………………………………………………………… 313
Глава 9……………………………………………………………………………………………………………………………………… 314
Глава 10……………………………………………………………………………………………………………………………………. 314
Глава 11……………………………………………………………………………………………………………………………………. 314
Глава 12……………………………………………………………………………………………………………………………………. 315
Глава 13……………………………………………………………………………………………………………………………………. 315
Глава 14……………………………………………………………………………………………………………………………………. 315
Глава 15……………………………………………………………………………………………………………………………………. 315
Глава 16……………………………………………………………………………………………………………………………………. 316
Предметный указатель…………………………………………………………………………. 317
Об авторе 320

Влад Хононов — инженер-программист, более 20 лет занимающийся промышленной разработкой. Успел поработать во множестве больших и малых компаний на разных позициях – от вебмастера до главного архитектора. Активно выступает на конференциях, пишет статьи в блоге, консультирует по темам, связанным с предметно-ориентированным проектированием, микросервисами, а также с программной архитектурой и унаследованным кодом.
-
НОВИНКАНет в наличии
Изучаем DDD – предметно-ориентированное проектирование
1038 ₽