
- •Сообщение об авторском праве
- •Предисловие С. Сомасегара
- •Предисловие Скотта Гатри
- •Предисловие Девида Хилла
- •Введение
- •Целевая аудитория
- •Как работать с данным руководством
- •Обратная связь и поддержка
- •Техническая поддержка
- •Сообщество и группа новостей
- •Авторская группа
- •Авторы и рецензенты
- •Поделитесь с нами своими успехами
- •Архитектура и дизайн программного обеспечения
- •Что такое архитектура программного обеспечения?
- •Почему архитектура так важна?
- •Цели архитектуры
- •Архитектура сегодня и завтра
- •Принципы проектирования архитектуры
- •Основные принципы проектирования архитектуры
- •Дополнительные источники
- •Основные принципы проектирования архитектуры ПО
- •Обзор
- •Основные принципы проектирования
- •Основные вопросы проектирования
- •Определение типа приложения
- •Выбор стратегии развертывания
- •Выбор соответствующих технологий
- •Выбор показателей качества
- •Решение о путях реализации сквозной функциональности
- •Архитектурные шаблоны и стили
- •Обзор
- •Что такое архитектурный стиль?
- •Обзор основных архитектурных стилей
- •Сочетание архитектурных стилей
- •Архитектура клиент/сервер
- •Компонентная архитектура
- •Проектирование на основе предметной области
- •Многослойная архитектура
- •Архитектура, основанная на шине сообщений
- •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
- •Шаблоны передачи данных
- •Шаблоны корпоративных решений
- •Шаблоны интеграции
- •Шаблоны безопасности Веб-сервисов
- •Дополнительные источники

выполнения на широком диапазоне устройств, работающих под управлением
Microsoft Windows Mobile.
Для создания подключенных приложений, поддерживающих широкий диапазон мобильных устройств или требующих Wireless Application Protocol (WAP)1, compact HTML (cHTML) либо подобные форматы формирования визуального представления, используйте ASP.NET для мобильных устройств.
Насыщенные клиентские приложения
Руководствуйтесь следующими рекомендациями при проектировании насыщенных клиентских приложений:
Для создания приложений с поддержкой насыщенных мультимедийных и графических возможностей используйте Windows Presentation Foundation (WPF).
Для создания приложений, загружаемых с Веб-сервера и выполняемых на клиенте
Windows, используйте XAML Browser Applications (XBAP)2.
Для создания приложений, предназначенных преимущественно для работы с документами или для формирования отчетов, применяйте технологию Microsoft Office Business Application (OBA)3.
При желании воспользоваться преимуществами широкого набора элементов управления сторонних производителей и инструментов быстрой разработки приложений применяйте Windows Forms. При проектировании составного приложения с использованием Windows Forms обратите внимание на предложение группы patterns & practices Smart Client Software Factory.
При построении приложения с использованием WPF рассмотрите следующие возможности:
◦Для составных приложений воспользуйтесь предлагаемым группой patterns & practices руководством Composite Client Application Guidance (Руководство по проектирования составных клиентских приложений).
◦В случаях, когда созданием представления занимаются дизайнеры, а не обычные разработчики, используйте шаблон Presentation Model (Model- View-ViewModel), который является разновидностью шаблона Model-View- Controller (MVC), специально приспособленной для платформ разработки UI. Чтобы предоставить дизайнерам больше возможностей, реализуйте шаблоны данных (DataTemplate) через пользовательские элементы управления. Также для организации связи между представлением (View) и
1Протокол беспроводного доступа (прим. переводчика).
2Приложения браузера XAML (прим. переводчика).
3Бизнес-приложения для Microsoft Office (прим. переводчика).

презентатором (Presenter) или моделью представления (View Model)
применяйте WPF Commands.
Насыщенные Интернет-приложения
При проектировании насыщенного Интернет-приложения (Rich Internet Application, RIA) руководствуйтесь следующими рекомендациями:
Для создания подключенных приложений, выполняющихся в браузере и поддерживающих широкий диапазон платформ, насыщенных графикой и поддерживающих богатые возможности работы с мультимедиа и представления,
используйте Silverlight.
Если принято решение создавать приложение с использованием Silverlight, рассмотрите следующие аспекты:
◦Рассмотрите возможность применения шаблона Presentation Model (Model- View-ViewModel), как описывалось ранее в данной главе.
◦При проектировании приложения, для которого планируется длительный срок эксплуатации и изменения в его ходе, воспользуйтесь предлагаемым группой patterns & practices руководством Composite Client Application Guidance.
Веб-приложения
При проектировании Веб-приложения руководствуйтесь следующими рекомендациями:
Для создания приложений, доступ к которым будет осуществляться через Веббраузер или специальный агент пользователя, используйте ASP.NET.
Если принято решения создавать приложение с использованием ASP.NET, обратите внимание на следующие аспекты:
◦Используйте шаблоны страниц, чтобы упростить разработку и реализовать единообразный UI для всех страниц приложения.
◦Применение AJAX с ASP.NET Web Forms позволит повысить интерактивность и перенести больший объем обработки в фоновый режим с меньшим числом обновлений страниц.
◦Если требуется включить области насыщенного медиасодержимого и интерактивности, используйте элементы управления Silverlight с ASP.NET.
◦Повысить тестируемость приложения или реализовать более четкое разделение между пользовательским интерфейсом приложения и бизнеслогикой позволит использование ASP.NET MVC Framework. Эта инфраструктура поддерживает подход на базе model-view-controller к разработке Веб-приложений.

Предложения группы patterns & practices, Smart Client Software Factory и Composite Client Application Guidance, более подробно рассматриваются в разделе «Предложения patterns & practices» далее в этой главе.
Аспекты производительности
Для обеспечения максимальной производительности слоя представления руководствуйтесь следующими рекомендациями:
Очень внимательно подходите к вопросу проектирования слоя представления, так чтобы он включал лишь функциональность, необходимую для обеспечения насыщенного взаимодействия с пользователем с быстрым откликом. Например, обеспечьте, чтобы слой представления мог проверять пользовательский ввод без необходимости обмена данными между уровнями. Это может потребовать присутствия правил проверки данных бизнес-слоя в слое представления, возможно, через применение метаданных или совместно используемых компонентов.
Взаимодействие между слоем представления и бизнес-слоем или слоем сервисов приложения должно быть асинхронным. Это устранит неблагоприятное влияние на удобство использования и время отклика приложения при возникновении большой задержки или обрывов связи.
Реализуйте кэширование данных, которые будут выводиться на экран пользователя, в слое представления. Например, можно кэшировать статистические данные, отображаемые в биржевых сводках.
Как правило, избегайте сохранения данных сеанса или кэширования данных отдельных пользователя. Это можно делать, только если число пользователей ограничено или объем данных относительно невелик. Однако для коротких сеансов, возможно, удобным будет подход с кэшированием данных каждого пользователя на короткий промежуток времени. Не забывайте о привязанности данных в Веб-фермах или фермах серверов приложений при хранении или кэшировании данных сеансов или данных отдельных пользователей.
При отображении данных всегда применяйте разделение данных на страницы. Не используйте запросы, которые могут возвращать неограниченное количество данных, и задавайте размер страницы, соответствующий отображаемому объему данных. Разбиение на страницы на стороне клиента должно применяться только в случае крайней необходимости.
Пользуйтесь ViewState в ASP.NET аккуратно, поскольку это приводит к увеличению объема данных, участвующего в каждом обращении к серверу, и может негативно сказаться на производительности приложения. Где это необходимо, настройте страницы на использование сеансов только для чтения или выполнение вообще без сохранения сеансов.
Этапы проектирования слоя представления
Далее приводится рекомендуемый процесс проектирования слоя представления приложения. Данный подход гарантирует, что при проектировании архитектуры будут учтены все необходимые аспекты.
1.Выберите тип клиента. Выберите тип клиента, удовлетворяющий требованиям и соответствующий ограничениям инфраструктуры и развертывания организации. Например, если пользователи имеют мобильные устройства и будут подключаться к сети периодически, вероятно, мобильный клиент будет оптимальным выбором. Сведения, которые будут полезны при выборе соответствующего типа клиента, можно найти в главе 20, «Выбор типа приложения».
2.Выберите технологию для реализации слоя представления. Определитесь в общих чертах с функциональностью UI и слоя представления и выберите технологию UI, отвечающую этим требованиям и доступную для выбранного типа клиента. На данном этапе, если доступные технологии не подходят, возможно, необходимо пересмотреть выбранный тип клиента. Технологии, предлагаемые для каждого типа приложения, приведены в приложении В, «Матрица технологий слоя представления».
3.Спроектируйте пользовательский интерфейс. Определитесь с тем, должен ли UI
быть модульным, и примите решение о том, как будут реализовано разделение функциональности в слое представления. Рассмотрите возможность использования шаблонов раздельного представления, таких как Presentation Model, MVC и MVP. Следуйте рекомендациям, приведенным в разделах Композиция, Навигация, Взаимодействие с пользователем и Пользовательский интерфейс данной главы ранее, это гарантирует создание UI, отвечающего всем поставленным требованиям. Доступные типы компонентов рассматриваются в главе 11, «Проектирование компонентов представления».
4.Выберите стратегию валидации данных. Используйте методики проверки данных для защиты своей системы от не пользующегося доверием ввода. Также определите подходящую стратегию для обработки и протоколирования исключений. Реализация соответствующих стратегий проверки, обработки исключений и протоколирования рассматривается в главе 17, «Сквозная функциональность».
5.Выберите стратегию реализации бизнес-логики. Вынесите бизнес-логику, чтобы отделить ее от кода слоя представления. Это сделает приложение более удобным в обслуживании, поскольку позволит изменять бизнес-логику без влияния на слой представления. Выбор методики зависит от сложности приложения; приводим общие принципы выбора:
◦Валидация в UI. В простых приложениях, где бизнес-логика используется только для проверки пользовательского ввода, ее можно разместить в компонентах UI. При этом бизнес-логику, не касающуюся валидации, включать в компоненты UI нельзя.

◦Компоненты обработки бизнес-задач. Для более сложных приложений,
поддерживающих транзакции или включающих базовую бизнес-логику, которая выходит за рамки проверки UI, продумайте размещение бизнеслогики в отдельных компонентах, которые будут использоваться компонентами UI.
◦Модель предметной области. В сложных корпоративных приложениях, в которых бизнес-логика используется совместно многими приложениями, вынесите компоненты бизнес-слоя в отдельный логический уровень. Это позволит развертывать бизнес-слой физически на отдельном уровне, что обеспечит масштабируемость и повторное использование другими приложениями.
◦Управление бизнес-правилами. В приложениях, которые должны поддерживать сложную проверку, координирование процессов и логику предметной области, размещайте бизнес-логику в подсистеме управления бизнес-правилами, такой как Microsoft BizTalk® Server.
6.Определите стратегию связи с другими слоями. Если приложение включает несколько слоев, таких как слой доступа к данным и бизнес-слой, определите стратегию связи между слоем представления и остальными слоями. При наличии выделенного бизнес-слоя слой представления будет обмениваться данными с ним. Если бизнес-слоя нет, слой представления будет взаимодействовать непосредственно со слоем доступа к данным. Для доступа к другим слоям используйте следующие техники:
◦Прямые вызовы методов. Если слой, с которым происходит взаимодействие, физически располагается на одном уровне со слоем представления, можно выполнять прямые вызовы методов.
◦Веб-сервисы. Используйте интерфейс Веб-сервиса, если хотите разделить доступ к данным или бизнес-логику с другими приложения, если бизнесслой или слой доступа к данным развернут на другом уровне, или если важно реализовать разделение функциональности. Если бизнес-логика или логика доступа к данным будет использоваться слоем представления в рамках внутренней сети, используйте WCF-службу, работающую по протоколу TCP. Если бизнес-логика или логика доступа к данным будет использоваться слоем представления через Интернет, используйте WCFслужбу, работающую по протоколу HTTP. Если в бизнес-логике или логике доступа к данным предполагаются длительные вызовы, реализуйте асинхронную связь с помощью WCF и очереди сообщений.
Более подробно реализация соответствующих стратегий связи рассматривается в главе 18, «Взаимодействие и обмен сообщениями».