- •Сообщение об авторском праве
- •Предисловие С. Сомасегара
- •Предисловие Скотта Гатри
- •Предисловие Девида Хилла
- •Введение
- •Целевая аудитория
- •Как работать с данным руководством
- •Обратная связь и поддержка
- •Техническая поддержка
- •Сообщество и группа новостей
- •Авторская группа
- •Авторы и рецензенты
- •Поделитесь с нами своими успехами
- •Архитектура и дизайн программного обеспечения
- •Что такое архитектура программного обеспечения?
- •Почему архитектура так важна?
- •Цели архитектуры
- •Архитектура сегодня и завтра
- •Принципы проектирования архитектуры
- •Основные принципы проектирования архитектуры
- •Дополнительные источники
- •Основные принципы проектирования архитектуры ПО
- •Обзор
- •Основные принципы проектирования
- •Основные вопросы проектирования
- •Определение типа приложения
- •Выбор стратегии развертывания
- •Выбор соответствующих технологий
- •Выбор показателей качества
- •Решение о путях реализации сквозной функциональности
- •Архитектурные шаблоны и стили
- •Обзор
- •Что такое архитектурный стиль?
- •Обзор основных архитектурных стилей
- •Сочетание архитектурных стилей
- •Архитектура клиент/сервер
- •Компонентная архитектура
- •Проектирование на основе предметной области
- •Многослойная архитектура
- •Архитектура, основанная на шине сообщений
- •N-уровневая / 3-уровневая архитектура
- •Объектно-ориентированная архитектура
- •Сервисно-ориентированная архитектура
- •Дополнительные источники
- •Методика построения архитектуры и дизайна
- •Обзор
- •Исходные данные, выходные данные и этапы проектирования
- •Определение целей архитектуры
- •Время и объем работ
- •Ключевые сценарии
- •Важные с точки зрения архитектуры варианты использования
- •Общее представление приложения
- •Подходящие технологии
- •Графическое представление архитектуры
- •Основные проблемы
- •Параметры качества
- •Сквозная функциональность
- •Вопросы, требующие особого внимания при проектировании
- •Варианты решений
- •Базовая архитектура и возможные варианты архитектуры
- •Пилотные архитектуры
- •Что дальше?
- •Анализ архитектуры
- •Оценки на основании сценариев
- •Представление дизайна архитектуры
- •Дополнительные источники
- •Основы проектирования
- •Рекомендации по проектированию многослойных приложений
- •Обзор
- •Логическое разделение на слои
- •Слой представления, бизнес-слой и слой данных
- •Сервисы и слои
- •Слой сервисов
- •Этапы проектирования многослойной структуры
- •Шаг 1 – Выбор стратегии разделения на слои
- •Шаг 2 – Выбор необходимых слоев
- •Шаг 3 – Принятие решения о распределении слоев и компонентов
- •Шаг 4 – Выяснение возможности сворачивания слоев
- •Шаг 5 – Определение правил взаимодействия между слоями
- •Шаг 6 – Определение сквозной функциональности
- •Шаг 7 – Определение интерфейсов между слоями
- •Шаг 8 – Выбор стратегии развертывания
- •Шаг 9 – Выбор протоколов связи
- •Рекомендации по проектированию слоя представления
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Управление исключениями
- •Навигация
- •Взаимодействие с пользователем
- •Пользовательский интерфейс
- •Валидация
- •Выбор технологии
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Аспекты производительности
- •Этапы проектирования слоя представления
- •Шаблоны проектирования
- •Предложения patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию бизнес-слоя
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Связывание и связность
- •Управление исключениями
- •Протоколирование, аудит и инструментирование
- •Валидация
- •Вопросы развертывания
- •Этапы проектирования бизнес-слоя
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию слоя доступа к данным
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Пакетная обработка
- •Большие бинарные объекты
- •Подключения
- •Формат данных
- •Управление исключениями
- •Объектно-реляционное сопоставление
- •Запросы
- •Хранимые процедуры
- •Сравнение хранимых процедур и динамического SQL
- •Транзакции
- •Валидация
- •Вопросы выбора технологий
- •Вопросы производительности
- •Вопросы безопасности
- •Вопросы развертывания
- •Этапы проектирования слоя доступа к данным
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию слоя сервисов
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Сетевое взаимодействие
- •Управление исключениями
- •Каналы обмена сообщениями
- •Структура сообщения
- •Конечная точка для передачи сообщения
- •Безопасность сообщений
- •Маршрутизация сообщений
- •Преобразование сообщений
- •Интерфейс сервиса
- •Валидация
- •REST и SOAP
- •Аспекты проектирования при использовании REST
- •Аспекты проектирования при использовании SOAP
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Этапы проектирования слоя сервисов
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию компонентов
- •Обзор
- •Общие рекомендации по проектированию компонентов
- •Распределение компонентов по слоям
- •Компоненты слоя представления
- •Компоненты слоя сервисов
- •Компоненты бизнес-слоя
- •Компоненты слоя доступа к данным
- •Компоненты сквозной функциональности
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Проектирование компонентов представления
- •Обзор
- •Шаг 1 – Понимание предъявляемых к UI требований
- •Шаг 2 – Выбор необходимого типа UI
- •Шаг 3 – Выбор технологии UI
- •Шаг 4 – Проектирование компонентов представления
- •Компоненты пользовательского интерфейса
- •Компоненты логики представления
- •Компоненты модели представления
- •Сущности представления
- •Шаг 5 – Определение требований к привязке данных
- •Шаг 6 – Выработка стратегии обработки ошибок
- •Шаг 7 – Определение стратегии валидации
- •Предложения patterns & practices
- •Дополнительные источники
- •Проектирование компонентов бизнес-слоя
- •Обзор
- •Шаг 1 – Выбор компонентов бизнес-слоя, которые будут использоваться в приложении
- •Шаг 3 – Выбор соответствующей поддержки транзакций
- •Шаг 4 – Выработка стратегии обработки бизнес-правил
- •Шаг 5 – Выбор шаблонов, соответствующих требованиям
- •Дополнительные источники
- •Обзор
- •Шаг 1 – Выбор способа представления сущностей
- •Шаг 2 – Выбор дизайна бизнес-сущностей
- •Шаг 3 – Определение механизмов сериализации
- •Проектирование на основе предметной области
- •Дополнительные источники
- •Проектирование компонентов рабочего процесса
- •Обзор
- •Шаг 1 – Выбор стиля рабочего процесса на основании сценариев
- •Шаг 2 – Выбор способа разработки
- •Шаг 3 – Определение стратегии обработки правил
- •Шаг 4 – Выбор решения для рабочего процесса
- •Шаг 5 – Проектирование компонентов бизнес-слоя для поддержки рабочего процесса
- •Windows Workflow Foundation
- •Сервер BizTalk
- •BizTalk с ESB
- •Совместное использование Windows Workflow Foundation и BizTalk
- •Дополнительные источники
- •Проектирование компонентов слоя доступа к данным
- •Обзор
- •Шаг 1 – Выбор технологии доступа к данным
- •Шаг 2 – Принятие решения о методе извлечения и хранения бизнес-объектов источника данных
- •Шаг 3 – Выбор способа подключения к источнику данных
- •Подключения
- •Пул подключений
- •Транзакции и параллелизм
- •Шаг 4 – Выработка стратегий обработки ошибок источника данных
- •Исключения
- •Логика повтора попыток
- •Истечение времени ожидания
- •Шаг 5 – Проектирование объектов агентов сервисов (необязательный)
- •Дополнительные источники
- •Показатели качества
- •Обзор
- •Общие показатели качества
- •Доступность
- •Концептуальная целостность
- •Возможность взаимодействия
- •Удобство и простота обслуживания
- •Управляемость
- •Производительность
- •Надежность
- •Возможность повторного использования
- •Масштабируемость
- •Безопасность
- •Обеспеченность технической поддержкой
- •Тестируемость
- •Взаимодействие с пользователем /удобство и простота использования
- •Дополнительные источники
- •Сквозная функциональность
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Управление исключениями
- •Протоколирование и инструментирование
- •Управление состоянием
- •Валидация
- •Этапы проектирования стратегии кэширования
- •Шаг 1 – Выбор данных, подлежащих кэшированию
- •Шаг 2 – Выбор места кэширования данных
- •Шаг 3 – Определение формата кэширования данных
- •Шаг 4 – Выработка подходящей стратегии управления кэшем
- •Шаг 5 – Выбор метода загрузки кэшированных данных
- •Этапы проектирования стратегии управления исключениями
- •Шаг 1 – Выбор обрабатываемых исключений
- •Шаг 2 – Выбор стратегии выявления исключений
- •Шаг 3 – Выработка стратегии распространения исключений
- •Шаг 4 – Выработка стратегии использования собственных исключений
- •Шаг 5 – Выбор соответствующих данных для сбора
- •Шаг 6 – Выработка стратегии протоколирования исключений
- •Шаг 7 – Выбор стратегии уведомления об исключениях
- •Шаг 8 – Принятие решение об обработке необрабатываемых исключений
- •Этапы проектирования стратегии валидации ввода и данных
- •Шаг 1 – Определение границ доверия
- •Шаг 2 – Определение ключевых сценариев
- •Шаг 3 – Выбор места валидации
- •Шаг 4 – Выработка стратегий валидации
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Взаимодействие и обмен сообщениями
- •Обзор
- •Общие принципы проектирования
- •Рекомендации по реализации связи посредством обмена сообщениями
- •Сравнение асинхронного и синхронного взаимодействия
- •Связывание и связность
- •Форматы данных
- •Возможность взаимодействия с другими системами
- •Производительность
- •Управление состоянием
- •Контрактно-ориентированное проектирование
- •Вопросы безопасности
- •Безопасность на транспортном уровне
- •Безопасность на уровне сообщения
- •Технологии
- •Технология WCF
- •Технология ASMX
- •Дополнительные источники
- •Физические уровни и развертывание
- •Обзор
- •Распределенное и нераспределенное развертывание
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Вопросы производительности и проектирования в распределенных средах
- •Рекомендации по размещению компонентов при распределенном развертывании
- •Шаблоны распределенного развертывания
- •Развертывание клиент-сервер
- •n-уровневое развертывание
- •2-уровневое развертывание
- •3-уровневое развертывание
- •4-уровневое развертывание
- •Развертывание веб-приложения
- •Развертывание насыщенного Интернет-приложения
- •Развертывание насыщенного клиентского приложения
- •Шаблоны развертывания для обеспечения наилучшей производительности
- •Кластер с балансировкой нагрузки
- •Привязка к конкретному серверу и сеансы пользователей
- •Фермы приложений
- •Шаблоны развертывания для обеспечения надежности
- •Отказоустойчивый кластер
- •Шаблоны обеспечения безопасности
- •Олицетворение/делегирование
- •Доверенная подсистема
- •Модель с применением множества доверенных удостоверений сервиса
- •Вертикальное и горизонтальное масштабирование
- •Вопросы вертикального масштабирования
- •Проектирование с поддержкой горизонтального масштабирования
- •Компромиссы и последствия их принятия
- •Компоненты без сохранения состояния
- •Секционирование данных и базы данных
- •Вопросы безопасности сетевой инфраструктуры
- •Вопросы управляемости
- •Шаблоны проектирования
- •Дополнительные источники
- •Архетипы приложений
- •Выбор типа приложения
- •Обзор
- •Обзор архетипов приложений
- •Типы приложений
- •Мобильное приложение
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервис
- •Веб-приложение
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Обработка запросов приложения
- •Аутентификация
- •Авторизация
- •Кэширование
- •Управление исключениями
- •Протоколирование и инструментирование
- •Навигация
- •Компоновка страницы
- •Формирование визуального отображения страницы
- •Управление сеансами
- •Валидация
- •Вопросы проектирования слоев
- •Слой представления
- •Бизнес-слой
- •Слой доступа к данным
- •Слой сервисов
- •Вопросы тестирования и тестируемости
- •Вопросы выбора технологий
- •Вопросы выбора стратегии развертывания
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Балансировка нагрузки
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных клиентских приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Сетевое взаимодействие
- •Композиция
- •Управление конфигурацией
- •Доступ к данным
- •Управление исключениями
- •Удобство и простота обслуживания
- •Слой представления
- •Управление состоянием
- •Рабочий процесс
- •Вопросы безопасности
- •Вопросы обработки данных
- •Кэширование данных
- •Параллельная обработка данных
- •Привязка данных
- •Вопросы автономной работы/работы без постоянного подключения
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Самодостаточное приложение
- •Развертывание по схеме клиент/сервер
- •N-уровневое развертывание
- •Технологии развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных Интернет-приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Доступ к данным
- •Управление исключениями
- •Протоколирование
- •Мультимедиа и графика
- •Приложения для мобильных устройств
- •Портируемость
- •Представление
- •Управление состоянием
- •Валидация
- •Вопросы безопасности
- •Вопросы обработки данных
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Установка подключаемого модуля RIA
- •Распределенное развертывание
- •Балансировка нагрузки
- •Веб-ферма
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование мобильных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация и авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Доступ к данным
- •Особенности устройств
- •Управление исключениями
- •Протоколирование
- •Портирование приложений
- •Управление энергопотреблением
- •Синхронизация
- •Тестирование
- •Пользовательский интерфейс
- •Валидация
- •Вопросы выбора технологий
- •Microsoft Silverlight for Mobile
- •.NET Compact Framework
- •Windows Mobile
- •Windows Embedded
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование сервисных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Бизнес-слой
- •Сетевое взаимодействие
- •Слой доступа к данным
- •Управление исключениями
- •Структура сообщения
- •Конечная точка сообщения
- •Защита сообщений
- •Преобразование сообщений
- •Шаблоны обмена сообщениями
- •Передача репрезентативного состояния
- •Слой сервисов
- •SOAP
- •Валидация
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование размещаемых сервисов и сервисов в облаке
- •Обзор
- •Обработка данных в облаке
- •Терминология размещаемых сервисов и сервисов в облаке
- •Преимущества приложений в облаке
- •Преимущества для ISV и поставщиков услуг размещения
- •Преимущества корпоративных потребителей сервисов
- •Вопросы проектирования
- •Изоляция и совместное использование данных
- •Безопасность данных
- •Шаблоны обеспечения безопасности данных
- •Хранение и расширяемость данных
- •Управление удостоверениями
- •Многотенантная архитектура
- •Локально или удаленно, создавать или покупать
- •Производительность
- •Композиция сервисов
- •Интеграция сервисов
- •Управление сервисами
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование офисных бизнес-приложений
- •Обзор
- •Компоненты офисных бизнес-приложений
- •Основные сценарии использования офисных бизнес-приложений
- •Управление корпоративной информацией
- •Бизнес-аналитика
- •Унифицированный обмен сообщениями
- •Общие шаблоны OBA
- •Расширенный канал доступа
- •Шаблон Direct Integration
- •Шаблон Mediated Integration
- •Интеграция документов
- •Шаблон Application Generated Documents
- •Шаблон Intelligent Documents/Embedded LOB Information
- •Шаблон Intelligent Documents/Embedded LOB Template
- •Шаблон Intelligent Documents/LOB Information Recognizer
- •Рабочий процесс обработки документов
- •Составной UI
- •Консолидация данных (Поисковая навигация)
- •Шаблон Data Consolidation
- •Запуск LOB-процесса
- •Координация совместной деятельности
- •Уведомления и задачи
- •Общие вопросы проектирования
- •Вопросы безопасности
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Обзор
- •Логические слои LOB-приложения SharePoint
- •Развертывание физического уровня
- •Основные сценарии и функции
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Каталог бизнес-данных
- •Хранилище документов и содержимого
- •Сервисы Excel
- •Сервисы форм InfoPath
- •Объектная модель SharePoint
- •Веб-части
- •Рабочий процесс
- •Вопросы выбора технологий
- •Принципы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Приложения
- •Обзор
- •Поиск данных и ресурсов
- •Как Microsoft организует техническую информацию в глобальной сети Интернет
- •Microsoft Developer Network
- •Microsoft TechNet
- •Технология .NET Framework
- •Общеязыковая среда выполнения
- •Доступ к данным
- •Мобильные приложения
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервисы
- •Рабочий процесс
- •Веб-приложения
- •Веб-сервер – Internet Information Services
- •Сервер базы данных – SQL Server
- •Среда разработки Visual Studio
- •Другие инструменты и библиотеки
- •Решения patterns & practices
- •Дополнительные источники
- •Матрица технологий слоя представления
- •Обзор
- •Обзор технологий представления
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Преимущества и недостатки
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Общие сценарии и решения
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Дополнительные источники
- •Матрица технологий слоя доступа к данным
- •Обзор
- •Обзор технологий доступа к данным
- •Преимущества и недостатки
- •Объектно-реляционный доступ к данным
- •Доступ к данным без подключения и в автономном режиме
- •Сценарии SOA/Сервис
- •N-уровневые и общие сценарии
- •Общие рекомендации
- •Общие сценарии и решения
- •Рекомендации по применению LINQ to SQL
- •Рекомендации по применению мобильных технологий
- •Дополнительные источники
- •Матрица интеграционных технологий
- •Обзор
- •Обзор интеграционных технологий
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Матрица технологий рабочего процесса
- •Обзор
- •Обзор технологий рабочего процесса
- •Пользовательский и системный рабочий процесс
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Enterprise Library от patterns & practices
- •Обзор
- •Назначение Enterprise Library
- •Составляющие Enterprise Library
- •Блоки приложений
- •Блок кэширования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок шифрования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок доступа к данным
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок обработки исключений
- •Ключевые сценарии
- •Применение
- •Блок протоколирования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок внедрения политик
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок безопасности
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок Unity
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок валидации
- •Ключевые сценарии
- •Применение
- •Замечания
- •Дополнительные источники
- •Каталог шаблонов patterns & practices
- •Шаблоны передачи данных
- •Шаблоны корпоративных решений
- •Шаблоны интеграции
- •Шаблоны безопасности Веб-сервисов
- •Дополнительные источники
13
Проектирование бизнессущностей
Обзор
Бизнес-сущности хранят значения данных и предоставляют их через свойства. Они содержат и управляют бизнес-данными, которые используются приложением, и обеспечивают программный доступ с сохранением состояния к бизнес-данным и связанной функциональности. Бизнес-сущности также должны проводить проверку содержащихся в них данных и инкапсулировать бизнес-логику для обеспечения непротиворечивости и реализации бизнес-правил и необходимого поведения. Таким образом, правильное проектирование или выбор бизнес-сущностей жизненно важны для обеспечения наилучшей производительности и эффективности бизнес-слоя.
Данная глава поможет разобраться с проектированием компонентов бизнес-сущностей. Она начинается с рассмотрения разных форматов данных и использования данных в приложении. После этого демонстрируется, как выбранный формат определяет возможные пути реализации бизнес-правил. Наконец, представляются варианты дизайна для собственных объектов и рассматривается, как реализовывается поддержка сериализации для разных форматов данных.
Общие принципы проектирования компонентов и компоненты, обычно используемые в слоях приложения, более подробно рассматриваются в главе 10, «Рекомендации по проектированию компонентов».
Шаг 1 – Выбор способа представления сущностей
На этом этапе рассматриваются разные способы представления бизнес-сущностей и преимущества и недостатки каждого из них, что поможет сделать правильный выбор представления для конкретного сценария. Перечислим наиболее распространенные форматы:
Собственные бизнес-объекты. Это объекты общеязыковой среды выполнения (common language runtime, CLR), описывающие сущности системы. Для создания этих объектов может использоваться технология объектно-реляционного сопоставления (object/relational mapping, O/RM), такая как ADO.NET Entity Framework (EF) или NHibernate (больше сведений можно найти в разделе
Дополнительные источники в конце данной главы), или их можно создавать вручную. Собственные бизнес-объекты подходят в случаях, когда требуется инкапсулировать сложные бизнес-правила или поведение вместе со связанными с ними данными. Если требуется выполнять доступ к бизнес-объектам через границы AppDomain (Домен приложения), процесса или физические границы, можно реализовать слой сервисов, который будет обеспечивать доступ посредством объектов передачи данных (Data Transfer Objects, DTO) и операций обновления или редактирования бизнес-объектов.
DataSet или DataTable. Объекты DataSet – это разновидность базы данных в памяти, которая обычно очень близко соответствует фактической схеме базы данных. Объекты DataSet, как правило, используются только, если не используется механизм O/RM-сопоставления и создается объектно-ориентированное приложение, в котором данные логики приложения очень близко соответствуют схеме базы данных. DataSet не может расширяться для инкапсуляции бизнеслогики или бизнес-правил. Несмотря на то, что DataSet могут быть сериализованы в XML, к ним не должен предоставляться доступ через границы процесса или сервиса.
XML. Это основанный на стандартах формат для организации структурированных данных. XML обычно используется для представления бизнес-сущностей, только если этого требует слой представления или если логика должна работать с содержимым, исходя из его схемы. Например, система маршрутизации сообщений, логика которой направляет сообщения на основании некоторых известных элементов XML-документа. Не забывайте, что использование и обработка XML может требовать больших объемов памяти.
Шаг 2 – Выбор дизайна бизнес-сущностей
Если принято решение о том, что собственные объекты обеспечат наилучшее представление бизнес-сущностей, следущим шагом является проектирование этих объектов. Подход, применяемый к проектированию собственных объектов, зависит от сорта объекта, который планируется использовать. Например, сущности модели предметной области требуют глубокого анализа предметной области, тогда как сущности модуля таблицы требуют понимания схемы базы данных. Рассмотрим общие подходы к проектированию при использовании бизнес-объектов:
Модель предметной области (Domain Model) – объектно-ориентированный шаблон проектирования. Цель проектирования предметной области – определение бизнес-объектов, которые представляют реальные сущности предметной области. При использовании модели предметной области бизнес-сущности и сущности предметной области включают и поведение, и структуру. Иначе говоря, бизнесправила и отношения инкапсулированы в модели предметной области. Проектирование предметной области требует глубокого анализа предметной области и, как правило, не сопоставляется с реляционными моделями, используемыми большинством баз данных. Применяйте модель предметной области, если предметная область содержит сложные бизнес-правила, если
создается насыщенный клиент, и модель предметной области может инициализироваться и удерживаться в памяти. Модель предметной области не может применяться при работе с бизнес-слоем, не сохраняющим состояние, который требует инициализации модели предметной области при каждом запросе. Более подробно модель предметной области и проектирование на основе предметной области рассматриваются в разделе «Проектирование на основе предметной области» далее в данной главе.
Модуль таблицы (Table Module) – это объектно-ориентрированный шаблон проектирования. Цель проектирования модуля таблицы – определение сущностей на основании таблиц или представлений базы данных. Операции, используемые для доступа к базе данных и заполнения сущностей модуля таблицы, обычно инкапсулированы в сущности. Однако для осуществления операций с базой данных и заполнения сущностей модуля таблицы могут также использоваться компоненты доступа к данным. Применяйте подход с модулем таблицы, если таблицы или представления базы данных достаточно точно представляют бизнес-сущности, используемые приложением, или если бизнес-логика и операции касаются одной таблицы или представления.
Специальные XML-объекты (Custom XML objects) представляют десериализованные XML-данные, которые могут обрабатываться кодом приложения. Объекты являются экземплярами классов, определяемыми атрибутами, которые сопоставляют свойства классов с элементами и атрибутами XML-структуры. Microsoft .NET Framework предоставляет компоненты, которые могут использоваться для десериализации XML-данных в объекты и сериализации объектов в XML. Используйте специальные XML-объекты, если данные, с которыми вы работаете, уже поступают в XML-формате (например, XML-файлы или операции базы данных, возвращающие XML как результирующее множество); если требуется формировать XML-данные из источника не ХML-данных; или при работе с документами, доступными только для чтения.
При использовании собственных объектов не обязательно, чтобы проектирование всех бизнессущностей выполнялось по одной схеме. Например, для одного из аспектов приложения со сложными правилами может потребоваться проектирование на основе модели предметной области, а все остальное приложение может использовать XML-объекты, модуль таблицы или объекты предметной области.
Шаг 3 – Определение механизмов сериализации
Должно быть принято решение о способе передачи бизнес-сущностей через границы. В большинстве случаев для передачи данных через физические границы, такие как AppDomain, процесс и границы интерфейса сервисов, требуется сериализация данных. Также данные можно сериализовать при пересечении логических границ, но при этом не забывайте о производительности. Рассмотрите следующие варианты передачи бизнес-сущностей:
Предоставление прямого доступа к сериализуемым бизнес-сущностям только в случае необходимости. Если бизнес-сущности используются другим слоем приложения, располагающимся на том же уровне, самый простой подход – предоставить бизнес-сущности для прямого доступа без сериализации. Однако недостатком такого подхода является установление зависимости между потребителями бизнес-сущностей и реализацией бизнес-сущностей. Поэтому применение такого подхода рекомендуется только в том случае, если имеется возможность напрямую управлять потребителями бизнес-сущностей, и нет необходимости в удаленном доступе к бизнес-сущностям с других уровней.
Преобразование бизнес-сущностей в сериализуемые объекты передачи данных.
Чтобы устранить зависимость потребителей данных от внутренней реализации бизнес-слоя, используйте преобразование бизнес-сущностей в специальные сериализуемые объекты передачи данных. Объект передачи данных (Data Transfer Object, DTO) – это шаблон проектирования, используемый для упаковки множества структур данных в одну структуру для передачи через границы. Объекты передачи данных также полезны, если потребители бизнес-сущностей используют другое представление или модель данных, например, уровень представления. Этот подход позволяет менять внутреннюю реализацию бизнес-слоя без влияния на потребителей данных и упрощает реализацию контроля версии интерфейсов. Его применение рекомендуется при потреблении данных внешними клиентами.
Предоставление XML для прямого доступа. В некоторых случаях бизнес-сущности могут сериализовываться и предоставляться как XML. .NET Framework обеспечивает широкую поддержку сериализации XML-данных. Атрибуты бизнес-сущностей преимущественно используются для управления сериализацией в XML.
Более подробно схемы данных для интерфейсов сервисов рассматриваются в главе 9, «Рекомендации по проектированию слоя сервисов». Взаимодействию слоев и уровней посвящена глава 18, «Взаимодействие и обмен сообщениями».
Проектирование на основе предметной области
Проектирование на основе предметной области (Domain Driven Design, DDD) – это объектноориентированный подход к проектированию программного обеспечения на основе предметной области, ее элементов и поведения и отношений между ними. Цель такого проектирования – создание программных систем, которые являются реализацией базовой предметной области, через описание модели предметной области, представленной на языке специалистов этой предметной области. Модель предметной области можно рассматривать как инфраструктуру, из которой впоследствии могут быть выведены решения.
Для применения DDD необходимо четко понимать предметную область, которую предполагается моделировать, или иметь способности для овладения такими знаниями. При создании модели предметной области группа разработки нередко работает в сотрудничестве со специалистами в данной области. Архитекторы, разработчики и специалисты в рассматриваемой области обладают разной подготовкой и во многих ситуациях будут
использовать разные языки для описания своих целей, желаний и требований. Однако в рамках DDD вся группа договаривается использовать единый язык, ориентированный на предметную область и исключающий все технические жаргонизмы.
В качестве ядра ПО выступает модель предметной области, которая является прямой проекцией этого общего языка; с ее помощью путем анализа языка группа быстро находит пробелы в ПО. Создание общего языка – это не просто упражнение по получению сведений от специалистов и их применению. Довольно часто в группах возникают проблемы с обменом информацией не только по причине непонимания языка предметной области, но также и из-за неопределенности языка самого по себе. Процесс DDD имеет целью не только реализацию используемого языка, но также улучшение и уточнение языка предметной области. Это, в свою очередь, положительно сказывается на создаваемом ПО, поскольку модель является прямой проекцией языка предметной области.
Модель предметной области представляется с помощью сущностей, объектов-значений, сводных корней, хранилищ и сервисов предметной области, которые организовываются в крупные области ответственности, называемые Ограниченными контекстами (Bounded Contexts).
Сущности – это объекты модели предметной области, имеющие уникальный идентификатор, который остается неизменным при изменении состояния ПО. Сущности инкапсулируют и состояние, и поведение. Примером сущности может быть объект Customer, представляющий и сохраняющий состояние определенного клиента и реализующий операции, которые могут выполняться с этим клиентом.
Объекты-значения – это объекты модели предметной области, используемые для описания определенных аспектов предметной области. Они не имеют уникального идентификатора и неизменны. Примером объекта-значения является Transaction Amount (Сумма транзакции) или
Customer Address (Адрес клиента).
Сводные корни – это сущности, логически группирующие взаимосвязанные дочерние сущности или объекты-значения, управляют доступом к ним и координируют взаимодействия между ними.
Хранилища отвечают за извлечение и хранение сводных корней, как правило, с использованием инфраструктуры объектно-реляционного сопоставления (O/RM).
Сервисы предметной области представляют операции, действия или бизнес-процессы и обеспечивают функциональность, используемую другими объектами модели предметной области. В некоторых случаях определенная функциональность или аспект предметной области не может быть сопоставлен ни с одним объектом, имеющим определенный жизненный цикл или идентификатор; такая функциональность может быть объявлена как сервис предметной области. В качестве примера сервиса предметной области можно привести сервис установления цен каталога товаров системы электронной торговли.
Чтобы сделать модель строгой и полезной языковой конструкцией, как правило, приходится интенсивно использовать изоляцию и инкапсуляцию в рамках модели предметной области. Это может обусловить относительную дороговизну системы, основанной на DDD. Несмотря на то, что DDD обеспечивает массу преимуществ с технической точки зрения, таких как удобство в