Какова лучшая архитектура для бизнес-приложений, использующих WPF & EF? - PullRequest
4 голосов
/ 02 июля 2011

Я запутался в архитектурах, которые мы можем использовать для разработки бизнес-приложений с использованием технологий WPF 4.0 и EF 4.0.

Мой первый выбор - традиционная N-уровневая архитектура, содержащая: пользовательский интерфейс, уровень бизнес-логики& Уровень доступа к данным с отключенным поведением.

Таким образом, я создаю 3 проекта для каждого слоя и еще один проект для моих сущностей / DTO (каждый слой является сборкой).Каждый слой ссылается только на его верхний и нижний уровни (то есть: пользовательский интерфейс может видеть BLL, но не может видеть DAL).Но все слои имеют доступ к сборке Entity / DTO для связи.Проблема начинается, когда я хочу создать простую форму CRUD с DataGrid, например.BLL удаляет DataContext из DAL, когда возвращает Entity / DTO, это причина, которая вынудила меня использовать STE.Но все же есть несколько проблем.Например, я должен вызывать метод «StartTracking» для каждой сущности, возвращаемой из BLL в пользовательский интерфейс.Короче говоря, я не уверен в надежности этого шаблона или думаю, что должен забыть об автоматически обрабатываемых формах CRUD.

Я использую модель репозитория на своем уровне DAL, но когда я ищу шаблон репозитория, я нахожуэто разные.Кажется, что неплохо ссылаться на уровни DAL / Repository и BLL / Services (не WCF или WebServices) из пользовательского интерфейса, и, таким образом, мы можем иметь подключенную среду (без использования STE).

Я вижу пример, в котором мы можем получить человека из хранилища, но сделать с ним что-нибудь, используя BLL или сервисы:

КОД UI:

var person = new PersonRepository().GetPerson(10);
Bll.Salary.PaySalary(person);

-или-

var person = new PersonRepository().GetPerson(10);
Bll.Person.MarkAsAbsent(person);

Или что-то в этом роде ...

С помощью этого шаблона мы можем отправлять сущности / DTO в пользовательский интерфейс подключенным способом, пока DataContext жив.

Я не знаю, понимаю ли я, как использовать шаблон репозитория в больших проектах.Я думаю, что не совсем понятно, как называть BLL или классы и методы служб таким образом.Более того, разработчики могут быть озадачены тем, где использовать методы репозитория или методы BLL / service, или о том, где создавать методы (в репозиториях или BLL / service).

Я предпочитаю архитектуру N-уровня с использованиемхороший подход для автоматического отслеживания изменений сущностей / DTO, таких как STE.

Не могли бы вы порекомендовать лучший шаблон в таких ситуациях или / и сослаться на некоторые хорошие книги или документы об этом.

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Я собрал пример приложения, которое может помочь с некоторыми вашими вопросами. Вы можете просмотреть примечания к презентации и образец через мой пост здесь:

http://blog.alner.net/archive/0001/01/01/wpf_ef_4_sig_presentation_2010.aspx

В примере показано использование STE и несколько помощников для улучшения работы STE Entity Framework в клиентском приложении для настольного компьютера.

Репозитории существуют, чтобы скрыть детали того, как вы получаете данные. Идея заключается в том, что вы можете поменять реализацию репозитория с того, в котором используется локальная база данных, на тот, который использует удаленный веб-сервис, без ведома верхних уровней.

1 голос
/ 03 июля 2011

Может быть, статья Архитектура для приложений WPF - любая помощь для вас.

Вы также можете посмотреть пример приложения BookLibrary WPF Application Framework (WAF) . Он показывает приложение WPF MVVM вместе с Entity Framework, применяющим описанную архитектуру.

...