Enterprise Library
Корпоративные приложения из функциональных блоков
Блок Data Access Application Block
Блок Exception Handling Application Block
Блок Caching Application Block
Блок Logging & Instrumentation Application Block
Блок Configuration Application Block
Блок Security Application Block
Блок Cryptography Application Block
Конфигурация Enterprise Library
Дальнейшее развитие Enterprise Library
Об авторе. Алексей Федоров сотрудник отдела стратегических технологий российского представительства компании Microsoft (alexeif@microsoft.com).
латформа Microsoft .NET предоставляет в распоряжение разработчиков большой набор классов, дающих возможность решать широкий спектр задач. Такой подход позволяет использовать платформу Microsoft .NET для создания различных типов приложений и выбирать из большого числа возможных архитектурных подходов.
Тем не менее разработчикам часто требуется решение определенного набора задач, не имеющих непосредственного отношения к функциональным требованиям, но повторяющихся из проекта в проект. В этом случае платформа не всегда способна напрямую предоставить способы решения таких задач без написания большого по объему ручного кода. В качестве решения данной проблемы Microsoft предлагает набор функциональных блоков Microsoft Application Building Blocks for .NET, доступных для загрузки с сайта Microsoft по адресу: http://msdn.microsoft.com/practices/AppBlocks/default.aspx.
Среди этих функциональных блоков можно найти повторно используемые, расширяемые и модифицируемые компоненты, предоставляющие механизмы для решения задач, связанных с протоколированием, кэшированием, управлением конфигурациями, управлением процессами на уровне пользовательского интерфейса, агрегации сервисов и т.п.
Хотя с момента своего появления в 2002 году эти функциональные блоки стали довольно популярны среди разработчиков, однако ряд опросов, проведенных на различных конференциях и на самом сайте для разработчиков, показал, что в существующем варианте функциональные блоки требуют ряда усовершенствований они должны лучше взаимодействовать друг с другом, необходимо снизить зависимости между блоками, упростить процесс их конфигурирования, а также их применение и т.п.
В январе 2005 года Microsoft выпустила Enterprise Library дальнейшее развитие функциональных блоков, предназначенных для использования в приложениях, создаваемых на платформе Microsoft .NET.
Enterprise Library (совместная разработка Microsoft и Avanade на базе библиотеки ACA.NET) объединяет функциональные блоки, которые прежде были доступны по отдельности, в единую инфраструктуру, включающую средства конфигурации, справочную систему и руководства по использованию и внутренней организации каждого функционального блока. Версии многих блоков обновлены, в них появилась новая функциональность.
В состав Enterprise Library 1.0 входят следующие функциональные блоки:
- Caching Application Block позволяет разработчикам включать в приложения поддержку локального кэша;
- Configuration Application Block служит для реализации операций чтения и записи конфигурационной информации;
- Data Access Application Block обеспечивает расширенную функциональность при работе с различными базами данных;
- Cryptography Application Block позволяет разработчикам включать в приложения поддержку шифрования и хеширования;
- Exception Handling Application Block реализует механизмы централизованной обработки исключений;
- Logging and Instrumentation Application Block может использоваться для реализации функций протоколирования и управления приложениями;
- Security Application Block обеспечивает расширенную функциональность, связанную с аутентификацией, авторизацией, получением информации о пользователях и ролях, извлечением и хранением профилей пользователей.
Взаимодействие функциональных блоков, входящих в состав Enterprise Library, показано на рис. 1.
Рис. 1
Обратите внимание на то, что, по сравнению с простым набором функциональных блоков, в Enterprise Library появились зависимости между отдельными блоками и механизмы расширения на основе «переходников». Переходники предназначены для расширения функциональности блоков без изменения их исходного кода. В тех случаях, когда модификация исходных кодов блока все же требуется, в состав Enterprise Library помимо собственно исходного кода входят описания внутреннего устройства и принципов, использовавшиеся при дизайне каждого блока, а также средства для модульного тестирования (Unit test).
При расширении набора функциональных блоков можно руководствоваться входящими в состав поставки типовыми подходами к дизайну и проектированию, средствами подключения к механизмам конфигурации, шаблонами и документами по дизайну, а также общими принципами тестирования новых и модифицированных функциональных блоков.
Блок Data Access Application Block
большинстве случаев разработчики используют механизмы ADO .NET для реализации функциональности, связанной с манипулированием данными в приложениях, создаваемых на платформе Microsoft .NET.
В задачу данного функционального блока входит обеспечение упрощенного доступа к наиболее часто используемым операциям доступа к данным, «прозрачная» поддержка различных типов данных, упрощение способов изменения и проверки конфигурационной информации.
Функциональный блок Data Access Application Block может использоваться для решения следующего набора задач:
- использование DataReader для извлечения нескольких записей;
- использование DataSet для извлечения нескольких записей;
- выполнение команды и получение параметров после ее выполнения;
- выполнение команды и получение возвращаемого ей значения;
- выполнение нескольких операций в рамках одной транзакции;
- получение XML-данных с SQL Server;
- обновление данных данными из DataSet.
Функции, реализованные в рамках блока Data Access Application Block, поддерживают работу с базами данных Microsoft SQL Server (7.0 и 2000), Oracle (9i) и DB2 (требуется провайдер IBM UDB 8.1.2).
Блок Exception Handling Application Block
анный функциональный блок предназначен для упрощения централизованной обработки исключений. В нем определены так называемые политики обработки исключений, которые обеспечивают связь между определенным классом исключений и действиями по их обработке. Например:
- информация об исключениях типа ApplicationException должна быть занесена в протокол;
- исключения типа SqlClientException должны быть перехвачены, преобразованы в исключения типа DataLayerException и выставлены повторно;
- исключения типа SecurityException должны быть перехвачены, заменены на исключения типа AccessDeniedException и повторно выставлены.
Из возможных способов обработки исключений, поддерживаемых в функциональном блоке Exception Handling Application Block, можно выделить:
- занесение информации об исключении в протокол;
- преобразование одного типа исключений в другой тип;
- замена одного типа исключений другим;
- возможность создания собственных способов обработки исключений, расширяющих стандартный набор, предоставляемый данным функциональным блоком.
Отметим, что данный функциональный блок значительно расширяет отдельный функциональный блок Exception Management Application Block for .NET, который предоставлял только механизмы для сбора информации об исключении и занесения информации о нем в протокол.
Блок Caching Application Block
уществует несколько типовых сценариев, требующих реализации функций кэширования. К таким сценариям, в частности, относятся следующие:
- вы создаете приложение с использованием технологий smart client, которое использует локальный кэш данных для обеспечения работы в отсоединенном режиме;
- вы создаете консольное приложение или сервис Windows, которому требуется использование механизмов кэширования для улучшения производительности;
- вы создаете Web-службу или приложение, которое использует локальный кэш данных, хранящихся в базе данных, поддерживающих Web-ферму;
- вам требуется:
- улучшить производительность и снизить число обращений к серверу,
- поддерживать сохраняемость данных в кэше так, чтобы содержимое кэша сохранялось после перезапуска приложения,
- создавать средства резервного хранения данных, позволяющие сохранять данные в базу данных или в изолированное хранилище так, чтобы данные сохранялись после перезапуска приложения,
- механизмы кэширования, не зависящие от потоковой модели приложения и включающие надежные механизмы обработки исключений.
Если для ваших задач подходит один или несколько из перечисленных выше сценариев, следует использовать функциональный блок Caching Application Block. Он предоставляет в распоряжение разработчиков гибкие и расширяемые механизмы кэширования, пригодные для использования на любом уровне многоуровневого приложения.
Данный функциональный блок может использоваться даже в ASP .NET-приложениях, хотя для реализации простых сценариев кэширования в этом случае рекомендуется применять штатные механизмы ASP .NET.
Блок Logging & Instrumentation Application Block
анный функциональный блок служит для реализации функций протоколирования информации, связанной с выполнением бизнес- и других операций, и поддерживает различные хранилища протоколов, настраиваемые извне.
Функциональный блок Logging & Instrumentation Application Block призван заменить существующие компоненты Enterprise Instrumentation Framework и Logging Application Block.
Механизмы конфигурации позволяют указать, где хранится протоколируемая информация и как она должна быть отформатирована. Эти механизмы настраиваются и при необходимости расширяются. Поддерживаются следующие механизмы протоколирования:
- стандартный протокол системных событий (Event Log);
- таблица базы данных;
- текстовый файл;
- очередь сообщений (MSMQ);
- электронная почта;
- WMI;
- Windows Event Trace.
При необходимости стандартный набор механизмов протоколирования может быть расширен.
Блок Configuration Application Block
спользование данного функционального блока позволяет упростить реализацию следующих типовых сценариев:
- в режиме выполнения приложению требуется считывать и/или сохранять сложную конфигурационную информацию;
- приложению требуется хранить конфигурационную информацию (пароли) в зашифрованном виде;
- серверное приложение с расположением серверов на ферме должно считывать конфигурационную информацию из централизованной базы данных;
- в режиме разработки приложения управление конфигурацией должно поддерживаться на уровне «мастеров», страниц свойств и должна выполняться проверка корректности вводимых данных;
- при развертывании приложений администратор должен иметь возможность изменить конфигурацию с помощью визуальных средств.
Функциональный блок Configuration Application Block является ключевым блоком в Enterprise Library он используется для конфигурирования всех блоков, включенных в состав продукта, и помимо этого предоставляет разработчикам удобные механизмы для реализации функций конфигурации в создаваемых приложениях.
Данный функциональный блок состоит из двух частей: Configuration Runtime части, используемой приложениями в момент исполнения для доступа к конфигурационным данным, и Configuration Designtime части, служащей для задания конфигурационной информации в режиме разработки. Конфигурационная информация может быть зашифрована; отдельные элементы конфигурации могут быть скрыты с помощью визуальных средств.
В состав Enterprise Library будет входить как отдельное средство управления конфигурацией, так и средство, непосредственно интегрированное в среду разработки Visual Studio.
Блок Security Application Block
сновные требования к механизмам обеспечения безопасности можно свести к приведенному ниже набору типовых сценариев:
- требуется аутентификация пользователей: возможно использование одной или нескольких систем или механизмов безопасности;
- требуется авторизация пользователей: возможно использование одной или нескольких систем или механизмов безопасности;
- требуется определение ролей, в которых может выступать пользователь: возможно использование одной или нескольких систем или механизмов безопасности;
- требуется хранение и извлечение информации из пользовательских профилей: возможно использование одной или нескольких систем или механизмов безопасности;
- требуется кэширование аутентификационной и авторизационной информации в рамках одной сессии.
Функциональный блок Security Application Block предоставляет разработчикам простой программный интерфейс и расширяемую реализацию базовых примитивов, связанных с поддержкой функций безопасности. Эти функции разделены на пять базовых областей (в соответствии с приведенными выше сценариями):
- аутентификация;
- авторизация;
- поддержка ролевой безопасности;
- профили пользователей;
- кэширование информации, связанной с аутентификацией и авторизацией конкретного пользователя.
Модуль, реализующий каждую базовую функцию, поддерживает расширяемые механизмы провайдеров. Так, в состав данного функционального блока входят провайдеры для взаимодействия с Active Directory, механизмами авторизации Authorization Manager (AzMan), а также поддержка простой базы данных.
Блок Cryptography Application Block
уществует определенный набор ситуаций, когда разработчикам требуются простые в использовании и надежные механизмы для создания и сравнения хеш-кодов, а также способы шифрования и расшифровки данных.
Наиболее часто встречаются следующие задачи:
- требуется шифрование данных с использованием симметричного ключа перед сохранением данных в базе данных их расшифровка после считывания;
- требуется шифрование данных без использования ключей, например при использовании данных на одном компьютере;
- требуется создание хеш-кода для пароля и его хранение в базе данных, возможность сравнения этого кода с кодом, предоставляемым пользователем без непосредственного хранения пользовательского пароля.
Функциональный блок Cryptography Application Block расширяет функциональность пространства имен System.Security.Cryptography и позволяет использовать симметрические алгоритмы для решения простых задач, связанных с шифрованием (поддерживаются все криптоалгоритмы, реализованные в .NET). Данный функциональный блок поддерживает операции со строками и потоком данных, в числе которых есть операции типа CreateHash, CompareHash, EncryptSymmetric и DecryptSymmetric. При этом и сами алгоритмы, и ключи могут настраиваться извне при помощи стандартного для Enterprise Library средства конфигурации.
Конфигурация Enterprise Library
онфигурация Enterprise Library осуществляется посредством специального приложения Enterprise Library Configuration Console, с помощью которого можно задавать и изменять настройки как приложения, так и отдельных функциональных блоков (рис. 2).
Рис. 2
Дальнейшее развитие Enterprise Library
ервая версия Enterprise Library вышла в январе 2005 года, однако работа над этим продуктом продолжается. Планируется расширение возможностей функциональных блоков и сценариев, в которых они могут использоваться. Также в планы разработчиков входит создание новых функциональных блоков (например, блока для реализации функций проверки введенной информации), расширение отдельно существующих функциональных блоков (например, User Interface Process Application Block) и включение их в состав Enterprise Library, а также реализация поддержки таких сценариев, как, например, создание приложений с использованием технологий Smart Client.
Помимо этого планируется интеграция Enterprise Library в Visual Studio 2005 с соответствующими изменениями, отражающими новую функциональность, доступную в платформе .NET 2.0
В июне 2005 года увидело свет обновление Enterprise Library, в состав которого был включен ряд исправлений и расширений, в том числе увеличение производительности блока конфигурации, изменения, связанные с поддержкой локализованных ресурсов, а также ряд изменений в конфигурационной консоли.
В настоящее время идет работа над новой версией Enterprise Library, которая будет обладать расширенной функциональностью и будет построена на технологиях .NET Framework 2.0. Как только работа над новой версией будет завершена, мы посвятим ей отдельный обзор.