Я запутался в архитектурах, которые мы можем использовать для разработки бизнес-приложений с использованием технологий 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.
Не могли бы вы порекомендовать лучший шаблон в таких ситуациях или / и сослаться на некоторые хорошие книги или документы об этом.