جزییات کتاب
Классическая книга Э. Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе. Подход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.Мировое сообщество программистов признает, что моделирование предметных областей - ключевой раздел проектирования программного обеспечения. В моделях предметных областей разработчики выражают сложные функции своих программ, реализуя их затем в таком виде, который отвечает реальным потребностям пользователей. Но несмотря на очевидную важность предмета, существует очень мало пособий по эффективному внедрению моделирования предметных областей в практику разработки программ.Книга Эрика Эванса заполняет этот пробел. Она посвящена не отдельным технологиям, а систематическому предметно-ориентированному подходу. В ней представлен широкий набор приемов и методик, основанных на практическом опыте, и фундаментальных принципов, помогающих в реализации программных проектов из сложных предметных областей. Органично переплетая практику проектирования и реализации программ, эта книга содержит множество фактических примеров, иллюстрирующих применение общих стратегических принципов в реальных программных проектах.Из книги читатель узнает, как с помощью модели предметной области придать разработке сложной системы нужную направленность и динамику. Выделены основные приемы и образцы-шаблоны, образующие общий язык группы разработчиков. Особо подчеркивается необходимость рефакторинга не только кода, но и модели в его основе, что в сочетании с итерационной agile-методикой приводит к углублению знаний о предметной области и повышению качества взаимодействия между специалистами и программистами. Подход книги строится именно на этом фундаменте, предлагая модели и архитектуры для систем и организаций любой сложности. Файл содержит OCR и ссылочное оглавление.СодержаниеВведениеМодель предметной области в работе Роль и выбор модели Алгоритмическая часть программы • Переработка знаний Составляющие эффективного моделирования Переработка знаний Непрерывное обучение Информоемкая архитектура Извлечение скрытого понятия Углубленные модели • Коммуникация и язык Единый язык Моделирование вслух Одна команда — один язык Документация, диаграммы, схемы Письменная проектная документация Выполняемый код решает все Пояснительные модели • Связь между моделью и реализацией Проектирование по модели Парадигмы моделирования и средства программирования Анатомия модели: зачем модель нужна пользователю Моделировщики-практики Структурные элементы предметно-ориентированного проектирования• Изоляция предметной области Многоуровневая архитектура Связь между уровнями Архитектурные среды Уровень предметной области - вместилище модели Антишаблон интеллектуального интерфейса пользователя Другие виды изоляции • Модель, выраженная в программе Ассоциации Сущности (указуемые объекты) Моделирование сущностей Проектирование операций идентификации Объекты-значения Проектирование объектов-значений Проектирование ассоциаций с помощью ОБЪЕКТОВ-ЗНАЧЕНИЙ Службы Службы и изоляция уровня предметной области Степень модульности Доступ к службам Модули (пакеты) Гибкая модульность Ловушки инфраструктуры Парадигмы моделирования Причины доминирования объектной парадигмы He-объекты в объектном мире Проектирование по модели в условиях смешения парадигм • Цикл существования объектов модели Агрегаты Фабрики Выбор фабрик и их местонахождения Когда достаточно конструктора Проектирование интерфейса Где реализовать логику инвариантов? Отличия между фабриками сущностей и фабриками объектов-значений Восстановление хранимых объектов Хранилища Запросы к хранилищам Клиентам безразлична реализация хранилищ, а разработчикам - - нет Реализация хранилища Работа в рамках архитектурной среды Связь с фабриками Проектирование объектов для реляционной базы данных • Работа с языком: расширенный пример Введение в систему управления доставкой Изоляция предметной области: добавление прикладных операций Отделение сущностей от значений Роль и другие атрибуты Проектирование ассоциаций в модели Границы агрегатов Выбор хранилищ Проход по сценариям Пример рабочей функции: изменение места назначения груза Пример рабочей функции: повторение заказов Создание объектов Фабрики и конструкторы для объекта Груз Добавление объекта Манипуляция Перерыв на рефакторинг: альтернативный агрегат Груз Модули в модели грузопоставок Новая функция: распределение заказов , Связь между двумя системами Усовершенствование модели: введение подразделений Оптимизация быстродействия Итоги Углубляющий рефакторинг Уровни рефакторинга Углубленные модели Углубленная модель и гибкая архитектура Процесс познания • Качественный скачок История успеха Модель неплоха, но. Скачок Углубленная модель Трезвое решение Воздаяние Потенциал Концентрация на основах Каскад озарений • Перевод неявных понятий в явные Извлечение понятий Внимание к языку Выявление узких мест Размышление над противоречиями Чтение книг Метод проб и ошибок Моделирование неочевидных понятий Явные условия-ограничения Процессы как объекты предметной области Спецификация Применение и реализация спецификаций • Гибкая архитектура Информативные интерфейсы Функции без побочных эффектов Утверждения Концептуальные контуры Изолированные классы Замкнутость операций Декларативная архитектура Декларативный стиль архитектуры Углы атаки Выделение подобластей Использование сложившихся формальных систем • Применение аналитических шаблонов Аналитические шаблоны как источник знания • Шаблоны и модель Стратегия Композит Почему не мелкий объект (flyweight)? • Углубляющий рефакторинг Инициирование Исследовательские группы Предыдущие наработки Архитектура для разработчиков Расчет времени Кризис как потенциальная возможность Стратегическое проектирование • Поддержание целостности модели Ограниченный контекст Распознавание дефектов внутри ограниченного контекста Непрерывная интеграция Карта контекстов Тестирование в границах контекста Организация и документирование карт контекстов Взаимосвязи между ограниченными контекстами Общее ядро Группы заказчик-поставщик Конформист Предохранительный уровень Проектирование интерфейса предохранительного уровня Реализация предохранительного уровня Поучительная история Отдельное существование Службы с открытым протоколом Общедоступный язык Унификация слона Выбор стратегии построения контекстов Уровень принятия решений: разработчики или выше Помещение самих себя в контекст Преобразование границ Принятие того, что нельзя изменить: контуры внешних систем Взаимоотношения с внешними системами Проектируемая система Учет особых случаев отдельными моделями Установка системы Компромиссы Если проект уже в работе Преобразования Слияние контекстов: от отдельного существования к общему ядру Слияние контекстов: от общего ядра к непрерывной интеграции Вытеснение устаревшей системы От открытого протокола к общедоступному языку • Дистилляция Смысловое ядро Выбор ядра Как распределить работу Эскалация дистилляции Неспециализированные подобласти Неспециализированный не значит хорошо переносимый Управление рисками в проекте Введение в предметную область Схематическое ядро Дистилляционный документ Разметка ядра Дистилляционный документ как методическое средство Связные механизмы Сравнение связных механизмов и неспециализированных подобластей Когда механизм входит в смысловое ядро Дистилляция к декларативному стилю Выделенное ядро Цена создания выделенного ядра Эволюция коллективных решений Абстрактное ядро Дистилляция в углубленных моделях Выбор целей рефакторинга • Крупномасштабная структура Эволюционная организация Метафорический образ системы Наивный образ: почему он нам не нужен Уровни разделения обязанностей Выбор подходящих уровней Уровень знаний Среда подключаемых компонентов Насколько жесткой должна быть структура Структурирующий рефакторинг Минимализм Коммуникативность и самодисциплина Реструктуризация дает гибкую архитектуру Дистилляция • Объединение стратегических подходов Сочетание крупномасштабных структур и ограниченных контекстов Сочетание крупномасштабной структуры и дистилляции Первоначальная оценка Кому планировать стратегию Самозарождение структуры в ходе разработки Смежная группа по разработке архитектуры Шесть принципов принятия решений при стратегическом проектировании То же верно и для технических сред проектирования Долой генеральный план Заключение Взгляд в будущее Приложение. Использование шаблонов в этой книге Глоссарий