Пер. с англ. — М.: Вильямc, 2011. — 448 с.: ил.
Оригинал: Domain-Driven Design: Tackling Complexity in the Heart of Software
Предисловие Мартина Фаулера
ISBN 978-5-8459-1597-9 (рус. )
ББК 32.973.26-018.2.75
Файл содержит OCR и ссылочное оглавление.
Классическая книга Э. Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе. Подход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.
Мировое сообщество программистов признает, что моделирование предметных областей - ключевой раздел проектирования программного обеспечения. В моделях предметных областей разработчики выражают сложные функции своих программ, реализуя их затем в таком виде, который отвечает реальным потребностям пользователей. Но несмотря на очевидную важность предмета, существует очень мало пособий по эффективному внедрению моделирования предметных областей в практику разработки программ.
Книга Эрика Эванса заполняет этот пробел. Она посвящена не отдельным технологиям, а систематическому предметно-ориентированному подходу. В ней представлен широкий набор приемов и методик, основанных на практическом опыте, и фундаментальных принципов, помогающих в реализации программных проектов из сложных предметных областей. Органично переплетая практику проектирования и реализации программ, эта книга содержит множество фактических примеров, иллюстрирующих применение общих стратегических принципов в реальных программных проектах.
Из книги читатель узнает, как с помощью модели предметной области придать разработке сложной системы нужную направленность и динамику. Выделены основные приемы и образцы-шаблоны, образующие общий язык группы разработчиков. Особо подчеркивается необходимость рефакторинга не только кода, но и модели в его основе, что в сочетании с итерационной agile-методикой приводит к углублению знаний о предметной области и повышению качества взаимодействия между специалистами и программистами. Подход книги строится именно на этом фундаменте, предлагая модели и архитектуры для систем и организаций любой сложности.
Содержание
Введение
Модель предметной области в работе
Роль и выбор модели
Алгоритмическая часть программы
• Переработка знаний
Составляющие эффективного моделирования
Переработка знаний
Непрерывное обучение
Информоемкая архитектура
Извлечение скрытого понятия
Углубленные модели
• Коммуникация и язык
Единый язык
Моделирование вслух
Одна команда — один язык
Документация, диаграммы, схемы
Письменная проектная документация
Выполняемый код решает все
Пояснительные модели
• Связь между моделью и реализацией
Проектирование по модели
Парадигмы моделирования и средства программирования
Анатомия модели: зачем модель нужна пользователю
Моделировщики-практики
Структурные элементы предметно-ориентированного проектирования
• Изоляция предметной области
Многоуровневая архитектура
Связь между уровнями
Архитектурные среды
Уровень предметной области - вместилище модели
Антишаблон интеллектуального интерфейса пользователя
Другие виды изоляции
• Модель, выраженная в программе
Ассоциации
Сущности (указуемые объекты)
Моделирование сущностей
Проектирование операций идентификации
Объекты-значения
Проектирование объектов-значений
Проектирование ассоциаций с помощью ОБЪЕКТОВ-ЗНАЧЕНИЙ
Службы
Службы и изоляция уровня предметной области
Степень модульности
Доступ к службам
Модули (пакеты)
Гибкая модульность
Ловушки инфраструктуры
Парадигмы моделирования
Причины доминирования объектной парадигмы
He-объекты в объектном мире
Проектирование по модели в условиях смешения парадигм
• Цикл существования объектов модели
Агрегаты
Фабрики
Выбор фабрик и их местонахождения
Когда достаточно конструктора
Проектирование интерфейса
Где реализовать логику инвариантов?
Отличия между фабриками сущностей и фабриками объектов-значений
Восстановление хранимых объектов
Хранилища
Запросы к хранилищам
Клиентам безразлична реализация хранилищ, а разработчикам - - нет
Реализация хранилища
Работа в рамках архитектурной среды
Связь с фабриками
Проектирование объектов для реляционной базы данных
• Работа с языком: расширенный пример
Введение в систему управления доставкой
Изоляция предметной области: добавление прикладных операций
Отделение сущностей от значений
Роль и другие атрибуты
Проектирование ассоциаций в модели
Границы агрегатов
Выбор хранилищ
Проход по сценариям
Пример рабочей функции: изменение места назначения груза
Пример рабочей функции: повторение заказов
Создание объектов
Фабрики и конструкторы для объекта Груз
Добавление объекта Манипуляция
Перерыв на рефакторинг: альтернативный агрегат Груз
Модули в модели грузопоставок
Новая функция: распределение заказов ,
Связь между двумя системами
Усовершенствование модели: введение подразделений
Оптимизация быстродействия
Итоги
Углубляющий рефакторинг
Уровни рефакторинга
Углубленные модели
Углубленная модель и гибкая архитектура
Процесс познания
• Качественный скачок
История успеха
Модель неплоха, но.
Скачок
Углубленная модель
Трезвое решение
Воздаяние
Потенциал
Концентрация на основах
Каскад озарений
• Перевод неявных понятий в явные
Извлечение понятий
Внимание к языку
Выявление узких мест
Размышление над противоречиями
Чтение книг
Метод проб и ошибок
Моделирование неочевидных понятий
Явные условия-ограничения
Процессы как объекты предметной области
Спецификация
Применение и реализация спецификаций
• Гибкая архитектура
Информативные интерфейсы
Функции без побочных эффектов
Утверждения
Концептуальные контуры
Изолированные классы
Замкнутость операций
Декларативная архитектура
Декларативный стиль архитектуры
Углы атаки
Выделение подобластей
Использование сложившихся формальных систем
• Применение аналитических шаблонов
Аналитические шаблоны как источник знания
• Шаблоны и модель
Стратегия
Композит
Почему не мелкий объект (flyweight)?
• Углубляющий рефакторинг
Инициирование
Исследовательские группы
Предыдущие наработки
Архитектура для разработчиков
Расчет времени
Кризис как потенциальная возможность
Стратегическое проектирование
• Поддержание целостности модели
Ограниченный контекст
Распознавание дефектов внутри ограниченного контекста
Непрерывная интеграция
Карта контекстов
Тестирование в границах контекста
Организация и документирование карт контекстов
Взаимосвязи между ограниченными контекстами
Общее ядро
Группы заказчик-поставщик
Конформист
Предохранительный уровень
Проектирование интерфейса предохранительного уровня
Реализация предохранительного уровня
Поучительная история
Отдельное существование
Службы с открытым протоколом
Общедоступный язык
Унификация слона
Выбор стратегии построения контекстов
Уровень принятия решений: разработчики или выше
Помещение самих себя в контекст
Преобразование границ
Принятие того, что нельзя изменить: контуры внешних систем
Взаимоотношения с внешними системами
Проектируемая система
Учет особых случаев отдельными моделями
Установка системы
Компромиссы
Если проект уже в работе
Преобразования
Слияние контекстов: от отдельного существования к общему ядру
Слияние контекстов: от общего ядра к непрерывной интеграции
Вытеснение устаревшей системы
От открытого протокола к общедоступному языку
• Дистилляция
Смысловое ядро
Выбор ядра
Как распределить работу
Эскалация дистилляции
Неспециализированные подобласти
Неспециализированный не значит хорошо переносимый
Управление рисками в проекте
Введение в предметную область
Схематическое ядро
Дистилляционный документ
Разметка ядра
Дистилляционный документ как методическое средство
Связные механизмы
Сравнение связных механизмов и неспециализированных подобластей
Когда механизм входит в смысловое ядро
Дистилляция к декларативному стилю
Выделенное ядро
Цена создания выделенного ядра
Эволюция коллективных решений
Абстрактное ядро
Дистилляция в углубленных моделях
Выбор целей рефакторинга
• Крупномасштабная структура
Эволюционная организация
Метафорический образ системы
Наивный образ: почему он нам не нужен
Уровни разделения обязанностей
Выбор подходящих уровней
Уровень знаний
Среда подключаемых компонентов
Насколько жесткой должна быть структура
Структурирующий рефакторинг
Минимализм
Коммуникативность и самодисциплина
Реструктуризация дает гибкую архитектуру
Дистилляция
• Объединение стратегических подходов
Сочетание крупномасштабных структур и ограниченных контекстов
Сочетание крупномасштабной структуры и дистилляции
Первоначальная оценка
Кому планировать стратегию
Самозарождение структуры в ходе разработки
Смежная группа по разработке архитектуры
Шесть принципов принятия решений при стратегическом проектировании
То же верно и для технических сред проектирования
Долой генеральный план
Заключение
Взгляд в будущее
Приложение. Использование шаблонов в этой книге
Глоссарий
Оригинал: Domain-Driven Design: Tackling Complexity in the Heart of Software
Предисловие Мартина Фаулера
ISBN 978-5-8459-1597-9 (рус. )
ББК 32.973.26-018.2.75
Файл содержит OCR и ссылочное оглавление.
Классическая книга Э. Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе. Подход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.
Мировое сообщество программистов признает, что моделирование предметных областей - ключевой раздел проектирования программного обеспечения. В моделях предметных областей разработчики выражают сложные функции своих программ, реализуя их затем в таком виде, который отвечает реальным потребностям пользователей. Но несмотря на очевидную важность предмета, существует очень мало пособий по эффективному внедрению моделирования предметных областей в практику разработки программ.
Книга Эрика Эванса заполняет этот пробел. Она посвящена не отдельным технологиям, а систематическому предметно-ориентированному подходу. В ней представлен широкий набор приемов и методик, основанных на практическом опыте, и фундаментальных принципов, помогающих в реализации программных проектов из сложных предметных областей. Органично переплетая практику проектирования и реализации программ, эта книга содержит множество фактических примеров, иллюстрирующих применение общих стратегических принципов в реальных программных проектах.
Из книги читатель узнает, как с помощью модели предметной области придать разработке сложной системы нужную направленность и динамику. Выделены основные приемы и образцы-шаблоны, образующие общий язык группы разработчиков. Особо подчеркивается необходимость рефакторинга не только кода, но и модели в его основе, что в сочетании с итерационной agile-методикой приводит к углублению знаний о предметной области и повышению качества взаимодействия между специалистами и программистами. Подход книги строится именно на этом фундаменте, предлагая модели и архитектуры для систем и организаций любой сложности.
Содержание
Введение
Модель предметной области в работе
Роль и выбор модели
Алгоритмическая часть программы
• Переработка знаний
Составляющие эффективного моделирования
Переработка знаний
Непрерывное обучение
Информоемкая архитектура
Извлечение скрытого понятия
Углубленные модели
• Коммуникация и язык
Единый язык
Моделирование вслух
Одна команда — один язык
Документация, диаграммы, схемы
Письменная проектная документация
Выполняемый код решает все
Пояснительные модели
• Связь между моделью и реализацией
Проектирование по модели
Парадигмы моделирования и средства программирования
Анатомия модели: зачем модель нужна пользователю
Моделировщики-практики
Структурные элементы предметно-ориентированного проектирования
• Изоляция предметной области
Многоуровневая архитектура
Связь между уровнями
Архитектурные среды
Уровень предметной области - вместилище модели
Антишаблон интеллектуального интерфейса пользователя
Другие виды изоляции
• Модель, выраженная в программе
Ассоциации
Сущности (указуемые объекты)
Моделирование сущностей
Проектирование операций идентификации
Объекты-значения
Проектирование объектов-значений
Проектирование ассоциаций с помощью ОБЪЕКТОВ-ЗНАЧЕНИЙ
Службы
Службы и изоляция уровня предметной области
Степень модульности
Доступ к службам
Модули (пакеты)
Гибкая модульность
Ловушки инфраструктуры
Парадигмы моделирования
Причины доминирования объектной парадигмы
He-объекты в объектном мире
Проектирование по модели в условиях смешения парадигм
• Цикл существования объектов модели
Агрегаты
Фабрики
Выбор фабрик и их местонахождения
Когда достаточно конструктора
Проектирование интерфейса
Где реализовать логику инвариантов?
Отличия между фабриками сущностей и фабриками объектов-значений
Восстановление хранимых объектов
Хранилища
Запросы к хранилищам
Клиентам безразлична реализация хранилищ, а разработчикам - - нет
Реализация хранилища
Работа в рамках архитектурной среды
Связь с фабриками
Проектирование объектов для реляционной базы данных
• Работа с языком: расширенный пример
Введение в систему управления доставкой
Изоляция предметной области: добавление прикладных операций
Отделение сущностей от значений
Роль и другие атрибуты
Проектирование ассоциаций в модели
Границы агрегатов
Выбор хранилищ
Проход по сценариям
Пример рабочей функции: изменение места назначения груза
Пример рабочей функции: повторение заказов
Создание объектов
Фабрики и конструкторы для объекта Груз
Добавление объекта Манипуляция
Перерыв на рефакторинг: альтернативный агрегат Груз
Модули в модели грузопоставок
Новая функция: распределение заказов ,
Связь между двумя системами
Усовершенствование модели: введение подразделений
Оптимизация быстродействия
Итоги
Углубляющий рефакторинг
Уровни рефакторинга
Углубленные модели
Углубленная модель и гибкая архитектура
Процесс познания
• Качественный скачок
История успеха
Модель неплоха, но.
Скачок
Углубленная модель
Трезвое решение
Воздаяние
Потенциал
Концентрация на основах
Каскад озарений
• Перевод неявных понятий в явные
Извлечение понятий
Внимание к языку
Выявление узких мест
Размышление над противоречиями
Чтение книг
Метод проб и ошибок
Моделирование неочевидных понятий
Явные условия-ограничения
Процессы как объекты предметной области
Спецификация
Применение и реализация спецификаций
• Гибкая архитектура
Информативные интерфейсы
Функции без побочных эффектов
Утверждения
Концептуальные контуры
Изолированные классы
Замкнутость операций
Декларативная архитектура
Декларативный стиль архитектуры
Углы атаки
Выделение подобластей
Использование сложившихся формальных систем
• Применение аналитических шаблонов
Аналитические шаблоны как источник знания
• Шаблоны и модель
Стратегия
Композит
Почему не мелкий объект (flyweight)?
• Углубляющий рефакторинг
Инициирование
Исследовательские группы
Предыдущие наработки
Архитектура для разработчиков
Расчет времени
Кризис как потенциальная возможность
Стратегическое проектирование
• Поддержание целостности модели
Ограниченный контекст
Распознавание дефектов внутри ограниченного контекста
Непрерывная интеграция
Карта контекстов
Тестирование в границах контекста
Организация и документирование карт контекстов
Взаимосвязи между ограниченными контекстами
Общее ядро
Группы заказчик-поставщик
Конформист
Предохранительный уровень
Проектирование интерфейса предохранительного уровня
Реализация предохранительного уровня
Поучительная история
Отдельное существование
Службы с открытым протоколом
Общедоступный язык
Унификация слона
Выбор стратегии построения контекстов
Уровень принятия решений: разработчики или выше
Помещение самих себя в контекст
Преобразование границ
Принятие того, что нельзя изменить: контуры внешних систем
Взаимоотношения с внешними системами
Проектируемая система
Учет особых случаев отдельными моделями
Установка системы
Компромиссы
Если проект уже в работе
Преобразования
Слияние контекстов: от отдельного существования к общему ядру
Слияние контекстов: от общего ядра к непрерывной интеграции
Вытеснение устаревшей системы
От открытого протокола к общедоступному языку
• Дистилляция
Смысловое ядро
Выбор ядра
Как распределить работу
Эскалация дистилляции
Неспециализированные подобласти
Неспециализированный не значит хорошо переносимый
Управление рисками в проекте
Введение в предметную область
Схематическое ядро
Дистилляционный документ
Разметка ядра
Дистилляционный документ как методическое средство
Связные механизмы
Сравнение связных механизмов и неспециализированных подобластей
Когда механизм входит в смысловое ядро
Дистилляция к декларативному стилю
Выделенное ядро
Цена создания выделенного ядра
Эволюция коллективных решений
Абстрактное ядро
Дистилляция в углубленных моделях
Выбор целей рефакторинга
• Крупномасштабная структура
Эволюционная организация
Метафорический образ системы
Наивный образ: почему он нам не нужен
Уровни разделения обязанностей
Выбор подходящих уровней
Уровень знаний
Среда подключаемых компонентов
Насколько жесткой должна быть структура
Структурирующий рефакторинг
Минимализм
Коммуникативность и самодисциплина
Реструктуризация дает гибкую архитектуру
Дистилляция
• Объединение стратегических подходов
Сочетание крупномасштабных структур и ограниченных контекстов
Сочетание крупномасштабной структуры и дистилляции
Первоначальная оценка
Кому планировать стратегию
Самозарождение структуры в ходе разработки
Смежная группа по разработке архитектуры
Шесть принципов принятия решений при стратегическом проектировании
То же верно и для технических сред проектирования
Долой генеральный план
Заключение
Взгляд в будущее
Приложение. Использование шаблонов в этой книге
Глоссарий