Мой уровень представления находится в MVC 3.
У меня есть уровень доступа к данным, который возвращает репозитории.Каждый репозиторий сопоставлен с одной таблицей.
Например, у меня есть следующие интерфейсы репозитория:
- ICustomerRepository
- ICustomerTypeRepository
У меня есть реализации Entity Framework этих репозиториев,Эти реализации внедряются во время выполнения с Ninject.
У меня есть два контроллера:
- CustomerController
- CustomerTypeController
Каждый контроллер имеет набор подпрограмм CRUD.У клиента должен быть тип.
Чтобы создать запись о клиенте, мне нужно использовать EFCustomerTypeRepository.
Теперь у меня есть конструктор в CustomerController, который выглядит следующим образом:
public class CustomerController: Controller
{
private ICustomerRepository customerRepository;
private ICustomerTypeRepository customerTypeRepository;
public CustomerController(ICustomerRepository customerRepository,
ICustomerTypeRepository customerTypeRepository)
{
this.customerRepository = customerRepository;
this.customerTypeRepository = customerTypeRepository;
}
...
Разработка находится на ранней стадии, и если я воспользуюсь этим подходом, то в течение следующих нескольких дней у этого конструктора будет 5или больше параметров.Это выглядит неправильно.
Я мог бы хранить всю эту логику в EFCustomerRepository, однако это нарушит принцип единой ответственности.Так что я не собираюсь этого делать.
Наконец, я могу обернуть эти репозитории и передать один объект типа RepositoryWrapper на мой контроллер.
Я не хочу вводить больше фреймворков, инструментов, чем я должен.Я стремлюсь достичь слабой связи и легкой расширяемости, но в настоящее время я застрял между передачей большего количества параметров конструктору или написанием оболочки для репозиториев.
Я использую MVC 3, EF 4.1, Ninject, Moq и Automapper.Спасибо