Применение DDD и шаблонов проектирования. Проблемно-ориентированное проектирование приложений с примерами на C# и .NET
Джимми Нильссон
Эта книга о разработке корпоративных программных приложений в среде .NET с применением шаблонов проектирования. В ней описаны: проблемно-ориентированные методы проектирования (DDD, или Domain Driven Design), разработка посредством тестирования (TDD, или Test-Driven Development), объектно-реляционное преобразование, т.е. методы, которые многие относят к ключевым технологиям разработки программного обеспечения. По мере развития и усложнения технологии все большее значение приобретают вопросы правильного применения методов проектирования. Ценность этой книги в том и состоит, что она помогает разобраться в этих вопросах. Хотя большинство примеров кода представлено на языке С#, материал книги может оказаться полезным и для тех, кто работает на платформе Java.
Книга адресована опытным разработчикам архитектуры и прикладного программного обеспечения уровня предприятий, в том числе и в среде .NET.
Издательство: Вильямс, 2008 г.
ISBN 978-5-8459-1296-1, 0-321-26820-2
Количество страниц: 560.
Содержание книги «Применение DDD и шаблонов проектирования. Проблемно-ориентированное проектирование приложений с примерами на C# и .NET»:
- 17 Отзывы о книге
- 26 Об авторе
- 27 Предисловия
- 31 Вступление: наведение мостов
- 37 Благодарности
- 38 От издательства
- 39 Часть I. Основы
- 41 Глава 1. Переоценка ценностей
- 41 Общие ценности
- 42 Оценка стилей архитектуры
- 42 Акцент на модели
- 43 Акцент на прецедентах использования
- 48 Если сделан акцент на модели, следует применять шаблон модели предметной области
- 53 База данных требует аккуратного обращения
- 58 Потеря соответствия модели предметной области и реляционной базы данных
- 63 Распределение требует аккуратного обращения
- 65 Акцент на обмене сообщениями
- 67 Оценка составляющих процесса
- 68 Предварительное проектирование архитектуры
- 71 Проектирование на основе предметной области
- 71 Разработка посредством тестирования
- 75 Рефакторинг кода
- 77 Отдельные составляющие или их сочетание
- 78 Непрерывная интеграция
- 79 Проблема интеграции
- 79 Решение проблемы или радикальный шаг в правильном направлении
- 80 Уроки, которые я извлек из опыта работы в своей организации
- 81 Дополнительные сведения
- 81 Не следует забывать об эксплуатации
- 81 Когда механизм нужен
- 82 Некоторые примеры механизмов эксплуатации
- 83 Это не только оплошность разработчиков
- 84 Резюме
- 85 Глава 2. Переход к шаблонам
- 86 Вкратце о шаблонах
- 88 Предостережения в отношении шаблонов
- 90 Шаблоны проектирования
- 90 Пример применения шаблона State
- 98 Архитектурные шаблоны
- 99 Пример применения шаблона Layers
- 100 Шаблон Domain Model в качестве другого примера
- 100 Шаблоны проектирования для конкретных типов приложений
- 101 Пример применения шаблона Query Object
- 107 Шаблоны предметной области
- 109 Пример применения шаблона Factory
- 114 Резюме
- 86 Вкратце о шаблонах
- 115 Глава 3. РПТ и рефакторинг кода
- 115 Разработка посредством тестирования
- 116 Порядок выполнения РПТ
- 116 Пора приступать к демонстрации
- 123 Следствия для проектирования
- 126 Недостатки проектирования методом РПТ
- 127 Следующая стадия
- 128 Заглушки и имитации
- 128 Типичный блочный тест
- 129 Объявление независимости
- 130 Работа с трудными объектами
- 130 Замена взаимодействующих объектов тестовыми заглушками
- 133 Замена взаимодействующих объектов имитирующими объектами
- 135 Последствия для проектирования
- 136 Выводы
- 136 Дополнительные сведения
- 136 Рефакторинг кода
- 137 Чистка недоброкачественного кода
- 148 Резюме
- 115 Разработка посредством тестирования
- 149 Часть II. Прикладное ППО
- 151 Глава 4. Новая используемая по умолчанию архитектура
- 151 Основа новой используемой по умолчанию архитектуры
- 153 Смещение акцента с базы данных на модель предметной области
- 153 Более конкретный акцент на ППО
- 154 Разделение на слои в соответствии с ППО
- 155 Первый набросок
- 156 Задачи и возможности для примера предметной области
- 158 Решение задач по очереди
- 171 Модель предметной области на данном этапе
- 173 Первая попытка привязать пользовательский интерфейс к модели предметной области
- 173 Основная цель
- 173 Акцент на простой пользовательский интерфейс
- 173 Составление списка заказов клиента
- 175 Ввод заказа
- 175 Что получается в итоге
- 176 Еще одно измерение
- 178 Расположение модели предметной области
- 178 Изолирование или совместное использование экземпляров
- 179 Реализация модели предметной области с сохранением или без сохранения состояния
- 179 Полная или частичная реализация модели предметной области
- 180 Резюме
- 151 Основа новой используемой по умолчанию архитектуры
- 181 Глава 5. Проектирование на основе модели предметной области
- 181 Уточнение модели предметной области простым экспериментированием с РПТ
- 182 Первая задача: создание классов Order и OrderFactory
- 187 Немного логики для предметной области
- 188 Вторая задача: создание класса OrderRepository и ввод свойства OrderNumber
- 193 Восстановление объекта-сущности из состояния сохраняемости: задание значений извне
- 198 Выборка списка заказов
- 200 Пора обсудить объекты-сущности
- 200 Назад к основному ходу рассуждений
- 202 Общая перспектива
- 203 Подделка класса OrderRepository
- 205 Несколько слов о сохранении
- 206 Общая сумма каждого заказа
- 211 Сведения о предыстории клиента
- 214 Жизненный цикл экземпляра объекта
- 216 Тип заказа
- 216 Ответственное лицо для заказа
- 218 Плавный интерфейс
- 220 Резюме
- 181 Уточнение модели предметной области простым экспериментированием с РПТ
- 221 Глава 6. Подготовка к инфраструктуре
- 222 POCO как образ жизни
- 223 НС для объектов-сущностей и объектов-значений
- 228 Соблюдать НС или не соблюдать
- 228 НС во время выполнения или компиляции
- 229 Во что обходится НС для объектов-сущностей и объектов-значений
- 231 НС для хранилищ
- 237 Во что обходятся хранилища единственного ряда
- 238 Сценарии сохранения
- 240 Основания для принятых решений
- 243 Построение механизма подделки
- 244 Дополнительные свойства механизма подделки
- 246 Реализация подделки
- 247 Воздействие подделки на блочные тесты
- 251 Тестирование базы данных
- 253 Установка базы данных в исходное состояние перед каждым тестом
- 255 Сохранение состояния базы данных во время выполнения тестов
- 255 Сброс данных для теста перед его выполнением
- 256 Не забывайте о развитии схемы базы данных
- 257 Тестирование блока кода отдельно от проверки обращения к базе данных
- 261 Формирование запросов
- 262 Объекты запросов единственного ряда
- 263 Во что обходятся объекты запросов единственного ряда
- 266 Размещение запросов
- 267 Агрегаты как инструмент формирования запросов
- 269 Описания в качестве запросов
- 269 Другие методы формирования запросов
- 270 Резюме
- 222 POCO как образ жизни
- 271 Глава 7. Порядок устанавливают правила
- 271 Разделение правил на категории
- 272 Принципы для правил и их применения
- 272 Двухсторонняя проверка правил: необязательная (профилактическая) и обязательная (задним числом)
- 272 Сохранению подлежат все состояния — даже ошибочные
- 273 Правила должны применяться продуктивно
- 273 Правила должны допускать поправки для ввода специальных правил
- 273 Правила должны размещаться вместе с состоянием
- 273 Правила должны быть очень удобными для тестирования
- 274 Система должна препятствовать переходу в недействительное состояние
- 274 Начало создания интерфейса API
- 275 Контекст, контекст и еще раз контекст!
- 276 Ограничения, связанные с базой данных
- 277 Привязка правил к переходам, связанным с моделью предметной области или же с инфраструктурой
- 278 Уточнение принципа «Сохранению подлежат все состояния — даже ошибочные»
- 280 Требования к интерфейсу API для основных правил, связанных с сохраняемостью
- 281 Возврат к проблемам интерфейса API
- 281 Какая именно проблема возникла
- 282 Мы допустили неправильный переход
- 282 Если мы забыли выполнить проверку
- 283 Акцент на правилах, связанных с предметной областью
- 285 Правила, требующие взаимодействия
- 286 Поиск методов обработки на основе множеств
- 289 Обслуживание проверки достоверности по шаблону Service
- 289 Попытка сделать непредусмотренный переход
- 292 Идентификационный номер клиента
- 294 Как избежать осложнений
- 295 Агрегаты как инструмент проверки правил
- 296 Расширение интерфейса API
- 296 Запрос правил для настройки пользовательского интерфейса
- 297 Возможность для внесения правил
- 297 Уточнение реализации
- 297 Наивная реализация
- 303 Переход от самой наивной стадии к созданию классов правил
- 306 Составление списка правил
- 307 Использование списка правил
- 308 Составление подсписков
- 309 Усовершенствование интерфейса API
- 310 Специальная настройка
- 310 Предоставление пользователю метаданных
- 311 Проблема под стать шаблону
- 311 Как обращаться со сложными правилами
- 313 Привязка к абстрактному представлению сохраняемости
- 313 Внедряемый интерфейс проверки достоверности
- 314 Альтернативные решения для проверки достоверности задним числом при сохранении
- 315 Повторное использование метаданных преобразования
- 315 Обобщения и анонимные методы как спасение
- 317 Другие подходы
- 317 Резюме
- 319 Часть III. Применение шаблонов архитектуры корпоративных программных приложений
- 321 Глава 8. Инфраструктура для сохраняемости
- 322 Требования к инфраструктуре сохраняемости
- 324 Место для хранения данных
- 324 Оперативная память
- 327 Файловая система
- 327 Объектная база данных
- 328 Реляционные базы данных
- 329 Один или несколько администраторов ресурсов
- 329 Другие факторы
- 330 Выбор решения и переход к его воплощению
- 330 Подход
- 330 Написание вручную заказного кода
- 331 Генерация заказного кода
- 333 Преобразование метаданных (объектно-реляционное преобразование)
- 335 Повторный выбор
- 335 Классификация
- 336 Вид модели предметной области
- 336 Вид объектно-реляционного преобразователя
- 337 Отправная точка
- 338 Акцент на интерфейсе API
- 339 Тип языка запросов
- 340 Улучшенная поддержка базы данных
- 341 Другие функциональные возможности
- 342 Классификация по шаблонам инфраструктуры
- 343 Тип метаданных для преобразования
- 344 Поля идентификации
- 346 Преобразование внешних ключей
- 346 Внедренное значение
- 347 Решения проблемы наследования
- 348 Карта идентичности
- 349 Единица работы
- 349 Загрузка по требованию или энергичная загрузка
- 350 Управление параллельным выполнением операций
- 351 Резюме
- 353 Глава 9. Приведение в действие преобразователя NHibernate
- 353 Основания для выбора преобразователя NHibernate
- 354 Краткое введение в NHibernate
- 354 Подготовка
- 356 Метаданные для преобразования
- 362 Небольшой пример интерфейса API
- 365 Транзакции
- 366 Требования к инфраструктуре сохраняемости
- 366 Высокий уровень неведения сохраняемости
- 367 Некоторые желательные свойства жизненного цикла постоянных объектов-сущностей
- 369 Аккуратное обращение с реляционной базой данных
- 370 Классификация
- 371 Вид модели предметной области
- 371 Вид объектно-реляционного преобразователя
- 372 Отправная точка
- 372 Акцент на интерфейсе API
- 372 Тип языка запросов
- 374 Улучшенная поддержка базы данных
- 375 Другие функциональные возможности
- 377 Классификация по шаблонам инфраструктуры
- 377 Тип метаданных для преобразования
- 377 Поля идентификации
- 379 Преобразование внешних ключей
- 380 Внедренное значение
- 381 Решения проблемы наследования
- 382 Карта идентичности
- 383 Единица работы
- 383 Загрузка по требованию или энергичная загрузка
- 384 Управление параллельным выполнением операций
- 384 Дополнительные возможности: перехватчики проверки достоверности
- 385 NHibernate и ППО
- 385 Краткий обзор сборок
- 386 Интерфейс ISession и хранилища
- 386 Интерфейс ISession, хранилища и транзакции
- 387 Чего мы достигли
- 388 Резюме
- 389 Часть IV. Что дальше
- 391 Глава 10. Рекомендуемые методы проектирования
- 392 Все дело в контексте
- 392 Слои и разделы
- 393 Основания для разбиения на разделы
- 393 Ограниченный контекст
- 394 Взаимосвязь между ограниченными контекстами и разделами
- 395 Расширение масштабов проектов ППО
- 395 Основание для разбиения модели предметной области на разделы — ориентация на службы
- 396 Введение в АОС
- 396 Что собой представляет АОС
- 396 Назначение АОС
- 397 Отличия АОС
- 397 Что такое служба
- 398 Что входит в службу
- 399 О значении четырех руководящих принципов АОС
- 400 Еще раз о том, что такое служба
- 401 Место объектной ориентации в АОС
- 401 Архитектура «клиент-сервер» и АОС
- 402 Односторонний асинхронный обмен сообщениями
- 403 Как АОС улучшает масштабируемость
- 403 Структура службы АОС
- 404 Взаимодействие службы с другими службами
- 407 АОС и недоступные службы
- 408 Сложные процессы обмена сообщениями
- 408 Масштабирование служб
- 409 Выводы
- 410 Инверсия управления и внесение зависимостей
- 410 Ни один из объектов не изолирован
- 412 Фабрики, реестры и указатели служб
- 415 Внесение зависимостей в конструктор
- 418 Внесение зависимостей в механизм установки
- 419 Инверсия управления
- 420 Внесение зависимостей в среде Spring.NET
- 422 Автосвязывание в среде PicoContainer.NET
- 424 Вложенные контейнеры
- 426 Сравнение шаблонов Service Locator и Dependency Injection
- 427 Выводы
- 429 Аспектно-ориентированное программирование
- 429 Из-за чего столько шума
- 433 Терминология АОП
- 433 АОП в .NET
- 447 Выводы
- 447 Резюме
- 392 Все дело в контексте
- 449 Глава 11. Акцент на пользовательском интерфейсе
- 449 Предварительный эпилог
- 451 Шаблон Model-View-Controller
- 452 Пример: обувной магазин Джо
- 459 Упрощение интерфейсов представления с помощью адаптеров
- 459 Развязка контроллера от представления
- 460 Сочетание представлений и контроллеров
- 460 Чего все это стоит
- 461 Разработка Web-формы посредством тестирования
- 461 Предпосылки
- 462 Пример
- 463 Модель предметной области
- 463 РПТ графического пользовательского интерфейса
- 470 Реализация Web-формы
- 472 Выводы
- 472 Имитация средствами NMock
- 474 Преобразование и заключение в оболочку
- 475 Преобразование и заключение объектов в оболочку
- 476 Заключение МПО в оболочку МП
- 477 Преобразование МП в МПО
- 480 Организация отношений между объектами
- 484 Вопросы состояния
- 485 Заключительные соображения
- 486 Резюме
- 486 Эпилог
- 489 Часть V. Приложения
- 491 Приложение А. Другие виды моделей предметной области
- 493 Объектно-ориентированная модель данных, уровень развитого обслуживания и документы
- 493 В начале
- 494 Объектная ориентация и реляционные структуры данных
- 494 Модель предметной области и объектно-реляционное преобразование
- 495 Уровень обслуживания
- 496 Объединение на одном уровне
- 496 Приложение Джимми и АОС
- 499 Структура уровня обслуживания
- 501 Предоставление данных
- 503 Степень структурирования
- 505 Несколько слов о транзакциях
- 505 Выводы
- 506 Модель базы данных как модель предметной области
- 506 Место обитания сущностей
- 511 Функциональный анализ как основа разработки приложений
- 514 Прагматизм и нетрадиционный подход
- 515 Предпосылки и история вопроса
- 515 Краткий обзор архитектуры
- 519 Пример приложения Джимми для обработки заказов
- 522 Бизнес-правила размещения заказов
- 527 Некоторые заключительные соображения
- 527 Резюме
- 493 Объектно-ориентированная модель данных, уровень развитого обслуживания и документы
- 529 Приложение Б. Перечень рассмотренных шаблонов
- 536 Список литературы
- 543 Предметный указатель
Инструкция как скачать книгу Джимми Нильссон: Применение DDD и шаблонов проектирования. Проблемно-ориентированное проектирование приложений с примерами на C# и .NET в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.