Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
Эрик Эванс
Классическая книга Э.Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе. Подход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.
Мировое сообщество программистов признает, что моделирование предметных областей - ключевой раздел проектирования программного обеспечения. В моделях предметных областей разработчики выражают сложные функции своих программ, реализуя их затем в таком виде, который отвечает реальным потребностям пользователей. Но несмотря на очевидную важность предмета, существует очень мало пособий по эффективному внедрению моделирования предметных областей в практику разработки программ.
Книга Эрика Эванса заполняет этот пробел. Она посвящена не отдельным технологиям, а систематическому предметно-ориентированному подходу. В ней представлен широкий набор приемов и методик, основанных на практическом опыте, и фундаментальных принципов, помогающих в реализации программных проектов из сложных предметных областей. Органично переплетая практику проектирования и реализации программ, эта книга содержит множество фактических примеров, иллюстрирующих применение общих стратегических принципов в реальных программных проектах.
Из книги читатель узнает, как с помощью модели предметной области придать разработке сложной системы нужную направленность и динамику. Выделены основные приемы и образцы-шаблоны, образующие общий язык группы разработчиков. Особо подчеркивается необходимость рефакторинга не только кода, но и модели в его основе, что в сочетании с итерационной agile-методикой приводит к углублению знаний о предметной области и повышению качества взаимодействия между специалистами и программистами. Подход книги строится именно на этом фундаменте, предлагая модели и архитектуры для систем и организаций любой сложности.
Издательство: Вильямс, 2011 г.
ISBN 978-5-8459-1597-9
Количество страниц: 448.
Содержание книги «Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем»:
- 17Введение
- 27 Часть I. Модель предметной области в работе
- 29 Роль и выбор модели
- 30 Алгоритмическая часть программы
- 33 Глава 1. Переработка знаний
- 37 Составляющие эффективного моделирования
- 38 Переработка знаний
- 39 Непрерывное обучение
- 40 Информоемкая архитектура
- 41 Извлечение скрытого понятия
- 43 Углубленные модели
- 45 Глава 2. Коммуникация и язык
- 45 Единый язык
- 50 Моделирование вслух
- 51 Одна команда - один язык
- 53 Документация, диаграммы, схемы
- 55 Письменная проектная документация
- 57 Выполняемый код решает все
- 58 Пояснительные модели
- 61 Глава 3. Связь между моделью и реализацией
- 62 Проектирование по модели
- 65 Парадигмы моделирования и средства программирования
- 71 Анатомия модели: зачем модель нужна пользователю
- 72 Моделировщики-практики
- 75 Часть II. Структурные элементы предметно-ориентированного проектирования
- 79 Глава 4. Изоляция предметной области
- 79 Многоуровневая архитектура
- 83 Связь между уровнями
- 84 Архитектурные среды
- 85 Уровень предметной области - вместилище модели
- 85 «Антишаблон» интеллектуального интерфейса пользователя
- 88 Другие виды изоляции
- 79 Многоуровневая архитектура
- 89 Глава 5. Модель, выраженная в программе
- 90 Ассоциации
- 95 Сущности (указуемые объекты)
- 98 Моделирование СУЩНОСТЕЙ
- 99 Проектирование операций идентификации
- 101 Объекты-значения
- 103 Проектирование ОБЪЕКТОВ-ЗНАЧЕНИЙ
- 106 Проектирование ассоциаций с помощью ОБЪЕКТОВ-ЗНАЧЕНИЙ
- 107 Службы
- 108 Службы и изоляция уровня предметной области
- 110 Степень модульности
- 110 Доступ к службам
- 111 Модули (пакеты)
- 112 Гибкая модульность
- 114 Ловушки инфраструктуры
- 116 Парадигмы моделирования
- 117 Причины доминирования объектной парадигмы
- 119 He-объекты в объектном мире
- 119 ПРОЕКТИРОВАНИЕ ПО МОДЕЛИ в условиях смешения парадигм
- 123 Глава 6. Цикл существования объектов модели
- 124 Агрегаты
- 133 Фабрики
- 135 Выбор фабрик и их местонахождения
- 137 Когда достаточно конструктора
- 138 Проектирование интерфейса
- 139 Где реализовать логику инвариантов?
- 139 Отличия между фабриками сущностей и фабриками объектов-значений
- 139 Восстановление хранимых объектов
- 141 Хранилища
- 145 Запросы к хранилищам
- 147 Клиентам безразлична реализация хранилищ, а разработчикам - нет
- 147 Реализация хранилища
- 149 Работа в рамках архитектурной среды
- 149 Связь с фабриками
- 151 Проектирование объектов для реляционной базы данных
- 153 Глава 7. Работа с языком: расширенный пример
- 153 Введение в систему управления доставкой
- 155 Изоляция предметной области: добавление прикладных операций
- 156 Отделение сущностей от значений
- 157 Роль и другие атрибуты
- 157 Проектирование ассоциаций в модели
- 158 Границы агрегатов
- 159 Выбор хранилищ
- 160 Проход по сценариям
- 160 Пример рабочей функции: изменение места назначения груза
- 161 Пример рабочей функции: повторение заказов
- 162 Создание объектов
- 162 Фабрики и конструкторы для объекта Груз
- 163 Добавление объекта Манипуляция
- 164 Перерыв на рефакторинг: альтернативный агрегат Груз
- 166 Модули в модели грузопоставок
- 167 Новая функция: распределение заказов
- 169 Связь между двумя системами
- 170 Усовершенствование модели: введение подразделений
- 172 Оптимизация быстродействия
- 172 Итоги
- 175 Часть III. Углубляющий рефакторинг
- 176 Уровни рефакторинга
- 177 Углубленные модели
- 178 Углубленная модель и гибкая архитектура
- 179 Процесс познания
- 181 Глава 8. Качественный скачок
- 182 История успеха
- 182 Модель неплоха, но
- 184 Скачок
- 185 Углубленная модель
- 187 Трезвое решение
- 188 Воздаяние
- 188 Потенциал
- 188 Концентрация на основах
- 189 Каскад озарений
- 182 История успеха
- 191 Глава 9. Перевод неявных понятий в явные
- 191 Извлечение понятий
- 191 Внимание к языку
- 195 Выявление узких мест
- 199 Размышление над противоречиями
- 200 Чтение книг
- 202 Метод проб и ошибок
- 202 Моделирование неочевидных понятий
- 202 Явные условия-ограничения
- 204 Процессы как объекты предметной области
- 205 Спецификация
- 208 Применение и реализация спецификаций
- 191 Извлечение понятий
- 221 Глава 10. Гибкая архитектура
- 223 Информативные интерфейсы
- 226 Функции без побочных эффектов
- 231 Утверждения
- 234 Концептуальные контуры
- 238 Изолированные классы
- 240 Замкнутость операций
- 242 Декларативная архитектура
- 245 Декларативный стиль архитектуры
- 252 Углы атаки
- 252 Выделение подобластей
- 253 Использование сложившихся формальных систем
- 263 Глава 11. Применение аналитических шаблонов
- 274 Аналитические шаблоны как источник знания
- 275 Глава 12. Шаблоны и модель
- 276 Стратегия
- 279 Композит
- 284 Почему не "мелкий объект" (flyweight)?
- 287 Глава 13. Углубляющий рефакторинг
- 287 Инициирование
- 288 Исследовательские группы
- 288 Предыдущие наработки
- 289 Архитектура для разработчиков
- 289 Расчет времени
- 290 Кризис как потенциальная возможность
- 291 Часть IV. Стратегическое проектирование
- 295 Глава 14. Поддержание целостности модели
- 298 Ограниченный контекст
- 301 Распознавание дефектов внутри ограниченного контекста
- 302 Непрерывная интеграция
- 304 Карта контекстов
- 311 Тестирование в границах контекста
- 311 Организация и документирование карт контекстов
- 311 Взаимосвязи между ограниченными контекстами
- 312 Общее ядро
- 313 Группы «заказчик-поставщик»
- 317 Конформист
- 320 Предохранительный уровень
- 321 Проектирование интерфейса предохранительного уровня
- 322 Реализация предохранительного уровня
- 324 Поучительная история
- 325 Отдельное существование
- 327 Службы с открытым протоколом
- 327 Общедоступный язык
- 330 Унификация слона
- 333 Выбор стратегии построения контекстов
- 333 Уровень принятия решений: разработчики или выше
- 333 Помещение самих себя в контекст
- 334 Преобразование границ
- 334 Принятие того, что нельзя изменить: контуры внешних систем
- 335 Взаимоотношения с внешними системами
- 335 Проектируемая система
- 336 Учет особых случаев отдельными моделями
- 337 Установка системы
- 337 Компромиссы
- 338 Если проект уже в работе
- 339 Преобразования
- 339 Слияние контекстов: от отдельного существования к общему ядру
- 340 Слияние контекстов: от общего ядра к непрерывной интеграции
- 341 Вытеснение устаревшей системы
- 342 От открытого протокола к общедоступному языку
- 298 Ограниченный контекст
- 345 Глава 15. Дистилляция
- 347 Смысловое ядро
- 349 Выбор ядра
- 349 Как распределить работу
- 350 Эскалация дистилляции
- 351 Неспециализированные подобласти
- 356 «Неспециализированный» не значит «хорошо переносимый»
- 357 Управление рисками в проекте
- 357 Введение в предметную область
- 359 Схематическое ядро
- 360 Дистилляционный документ
- 361 Разметка ядра
- 362 Дистилляционный документ как методическое средство
- 362 Связные механизмы
- 364 Сравнение связных механизмов и неспециализированных подобластей
- 365 Когда механизм входит в смысловое ядро
- 366 Дистилляция к декларативному стилю
- 366 Выделенное ядро
- 367 Цена создания выделенного ядра
- 368 Эволюция коллективных решений
- 373 Абстрактное ядро
- 374 Дистилляция в углубленных моделях
- 374 Выбор целей рефакторинга
- 347 Смысловое ядро
- 375 Глава 16. Крупномасштабная структура
- 378 Эволюционная организация
- 380 Метафорический образ системы
- 382 «Наивный образ»: почему он нам не нужен
- 382 Уровни разделения обязанностей
- 391 Выбор подходящих уровней
- 395 Уровень знаний
- 402 Среда подключаемых компонентов
- 406 Насколько жесткой должна быть структура
- 407 Структурирующий рефакторинг
- 408 Минимализм
- 408 Коммуникативность и самодисциплина
- 408 Реструктуризация дает гибкую архитектуру
- 409 Дистилляция
- 411 Глава 17. Объединение стратегических подходов
- 411 Сочетание крупномасштабных структур и ограниченных контекстов
- 414 Сочетание крупномасштабной структуры и дистилляции
- 415 Первоначальная оценка
- 416 Кому планировать стратегию
- 416 Самозарождение структуры в ходе разработки
- 417 Смежная группа по разработке архитектуры
- 417 Шесть принципов принятия решений при стратегическом проектировании
- 420 То же верно и для технических сред проектирования
- 421 Долой генеральный план
- 423 Заключение
- 427 Взгляд в будущее
- 429 Приложение. Использование шаблонов в этой книге
- 433 Глоссарий
- 437 Список литературы
- 438 Фотографии
- 439 Предметный указатель
Инструкция как скачать книгу Эрик Эванс: Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.