ASP.NET MVC 3 Реализация единицы работы с использованием DI и репозитория с EF - PullRequest
3 голосов
/ 30 января 2012

Итак, я пытаюсь применить лучшие практики на этапе проектирования системы. Я собираюсь использовать контейнер DI (ninject) с Entity Framework 4, ASP.NET MVC 3 C # и шаблоном репозитория / единицы работы.

У меня будут модели, в которых таблицы каждой базы данных сопоставлены с классами. У меня будет строка подключения для каждой базы данных в web.config. Я собираюсь иметь класс для каждой строки подключения (названный так же в соответствии с соглашением EF), который наследуется от DbContext и имеет DbSet для каждой таблицы. Я собираюсь иметь абстрактный интерфейс репозитория для каждого объекта базы данных, названного в соответствии с соглашением ITRepository, где T - это имя объекта базы данных (ICarRepository для объекта базы данных Car). Каждый интерфейс репозитория будет содержать IQueryable для сущности, а также определять, какие методы должны быть доступны. У меня будет конкретный репозиторий EFTRepository, который наследуется от ITRepository и определяет, как работают открытые методы. У меня будет GenericRepository<TEntity>, определенный для использования с объектами, которым требуется только минимальный доступ, например базовый CRUD. Я собираюсь использовать ControllerFactory из ninject в качестве контейнера DI. Я собираюсь присоединить фабрику контроллеров к объектам в Application_Start (). Я собираюсь связать все свои зависимости, такие как Bind<ITRepository>().To<EFTRepository>(), в фабричном методе AddBindings (). Я собираюсь реализовать шаблон единиц работы для каждой базы данных и придерживаться правил именования UnitOfWorkDB (UnitOfWorkAutomobile для базы данных Automobile). Единица работы будет содержать соответствующий контекст базы данных и репозитории.

Я пойду об этом, верно? Я не использовал этот набор шаблонов раньше и хочу убедиться, что буду использовать их правильно. Критика приветствуется!

1 Ответ

3 голосов
/ 30 января 2012

Наследование от базового репозитория может обеспечить некоторые простые «универсальные» функции, но в других ситуациях вы быстро обнаружите, что становится беспорядочно пытаться создать универсальный репозиторий (предполагая, что это было то, что наследовало).

Все остальное, что вы описали, кажется довольно хорошим.

Вы не сказали, что должно было быть введено, где, хотя, я предполагаю, что вы будете внедрять службу, служба займет единицу работы (IUnitOfWork, например, созданная в соответствии с запросом).экземпляр) и IWhwhatRepostory

...