Как объединить EntityFramework, Repository, UnitOfWork и Automapper в одном приложении MVC?

Сначала я решил создать один интерфейс, назвал его IDataAccessLayer и начал добавлять в него все: такие методы, как GetUsers(), GetUser(int id), GetOrderByNumber(int number), DeleteOrder(int Id) и т. д.

Сначала это работало просто идеально. Но потом я понял, что конкретная реализация DataLayer:IDataLayer становится большой. Я решил разрезать его на несколько частичных файлов классов. Тем не менее я чувствовал, что я делаю что-то действительно неправильно.

Затем я решил создать интерфейсы для каждой логической части, например IUsers, IOrders, IItems и т. д. Не получилось, потому что я обращался к репозиторию через одно зависимое свойство, внедренное в конструктор контроллера. Поэтому я не мог просто добавлять еще одно свойство каждый раз, когда мне нужно использовать другой тип dataContext в моем контроллере.

Затем, после многих часов чтения статей об Entity Framework, я наконец понял, что должен использовать шаблоны Repository и Unit of work. И все же мне нужно как-то отделить POCO от моих объектов ViewModel, хотя почти все время они будут иметь сходство. Автомаппер очень помогает. Но теперь я не уверен, как использовать все вместе. Entity Framework, Patterns, Automapper и Injection framework, например Ninject.

У меня нет четкого понимания, как смешать все это в одну потрясающую архитектуру. Не могли бы вы показать мне несколько хороших примеров.


person iLemming    schedule 11.07.2011    source источник


Ответы (3)


Во-первых, это общая статья о многоуровневой архитектуре с использованием принципов Repository и UnitOfWork: ссылка. У меня есть некоторый опыт работы с EF и вышеупомянутыми шаблонами, и я нашел эту статью очень полезной.

Посмотрите здесь, а также здесь статьи MSDN об этих принципах.

С Уважением.

person sTodorov    schedule 11.07.2011

Вы можете взглянуть на этот пример (MVCArch), который я написал несколько месяцев назад. Он использует преимущества:

  • Структура сущности
  • Шаблоны репозитория и единицы работы
  • Автосопоставление
  • Нить
  • и т.д...

Надеюсь это поможет.

person Fabrice Michellonet    schedule 15.06.2012
comment
Отлично! Коллекция всех замечательных шаблонов MVC, работающих вместе! - person Levitikon; 31.05.2013

Вы прошли через эти руководства.

person Darin Dimitrov    schedule 11.07.2011
comment
@Darin Это хорошие учебные пособия, чтобы получить представление, но я не думаю, что вам следует внедрять их в реальное приложение. Я имею в виду, что все репозитории тесно связаны с классом UnitOfWork. И каждый раз, когда вы добавляете новый репозиторий в свою систему, вы также меняете свой класс UnitOfWork. не так ли? - person Usman Khalid; 27.06.2013