Entity Framework в многоуровневых архитектурах

ОГЛАВЛЕНИЕ

Когда архитекторы n-уровневой архитектуры оценивают какую-либо новую технологию, шаблон или стратегию, они решают, как эта новая часть головоломки будет сочетаться с архитектурой. Если есть платформа Entity Framework, интеграция не вызывает каких-либо сложностей. Она может быть интегрирована в n-уровневую архитектуру, а также в одноуровневую архитектуру.

В статье за этот месяц я продемонстрирую добавление платформы Entity Framework в n-уровневую архитектуру, в которой используются технологии Windows® Communication Foundation (WCF) и Windows Presentation Foundation (WPF), а также шаблон «модель-представление-презентатор» (Model View Presenter, MVP). Я представлю пример архитектуры со слоями для базы данных логического хранилища, доступа к данным, модели области, диспетчера, уровня службы, уровня представления и пассивного уровня пользовательского интерфейса и продемонстрирую интеграцию этих слоев с помощью платформы Entity Framework. Все используемые примеры кода доступны для загрузки на веб-узле журнала MSDN Magazine.

Определение слоев

Представленное приложение позволяет выполнять поиск клиентов в образце базы данных NorthwindEF, а также просматривать, добавлять, изменять и удалять их. Но прежде чем углубляться в код и примеры, давайте рассмотрим общую архитектуру примера. Поскольку основное внимание уделяется не архитектуре, а интеграции платформы Entity Framework с архитектурным проектом, я выбрал относительно распространенную архитектуру, которая может быть достаточно просто изменена и интегрирована с другими стратегиями.

На рис. 1 показано общее представление типичной многослойной архитектуры. Два верхних слоя предназначены для представления пользовательского интерфейса и перемещения по нему с помощью слоя пользовательского интерфейса и слоя презентации. Слой пользовательского интерфейса может быть реализован с помощью любой из многочисленных доступных технологий; однако в этой статье и примерах используется платформа WPF. Слой пользовательского интерфейса соответствует шаблону MVP с пассивным представлением, это означает, что представления (верхний слой пользовательского интерфейса) управляются и подготавливаются слоем презентации. Презентаторы ответственны за предоставление представлениям данных, получение данных из представлений для сохранения в нижних слоях и вообще за реагирование на события, созданные представлениями.

 

Рис. 1. Обзор архитектуры

В моем примере презентаторы взаимодействуют с нижними слоями через платформу WCF. Презентатор вызывает службу через платформу WCF, используя контракт службы в качестве руководства. Слой службы предоставляет службы через интерфейсы контрактов служб. Эти контракты позволяют презентаторам получать сведения о вызове служб.

Слой службы ответственен за получение данных от презентаторов и вызов соответствующих методов бизнес-слоя, выполняющих соответствующую бизнес-логику, а также сбор и модификацию данных. Бизнес-слой содержит бизнес-логику и код LINQ к Entities. Код LINQ к Entities ссылается на сущностную модель, автоматически созданную на основе платформы Entity Framework. При выполнении запросов LINQ платформа Entity Framework преобразует запрос LINQ в концептуальную сущностную модель (Entity Data Model – EDM ), сопоставляет аспекты сущности уровню хранилища и создает запрос SQL для выполнения для базы данных.