Master-Detail View с несколькими репозиториями с помощью внедрения зависимостей контроллера - PullRequest
2 голосов
/ 10 декабря 2010

Я пытаюсь использовать Ninject для внедрения репозиториев в контроллеры моего проекта MVC.

public class HomeController : Controller
    {
        private readonly ICustomerRepository _customerRepository;
        //
        // GET: /Home/
        public HomeController(ICustomerRepository customerRepository)
        {
            _customerRepository = customerRepository;
        }
     }

Все это имеет смысл и достаточно просто, но когда представление становится более сложным и нуждается в отображении основного сценария детализации, могу ли я внедрить оба интерфейса репозитория? Это изменится, если он достигнет 4 или 5 уровней? (например, пользователь выбирает клиента, проект, группу, подразделение, а затем получает список людей)

Я придумал три вещи.

  1. Внедрить все необходимые репозитории через конструктор.
  2. Создайте концепцию супер-хранилища или
  3. Создание частичных представлений и контроллеров для каждого из репозиториев.

Есть ли передовая практика по шаблону, который я должен использовать для этого? Любое понимание было бы замечательно.

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Опция 3 - лучшая - опция 1 увеличивает количество зависимостей для HomeController, что усложняет задачу по мере увеличения количества источников данных. Вариант 2 создает аналогичную проблему для вашего «супер-репозитория», так как ему потребуется большое количество методов для поддержки всех запросов в вашей системе.

Создание контроллера для каждого из нескольких меньших форм позволит каждому быть довольно простым и простым для рассуждений.

0 голосов
/ 10 декабря 2010

Я учился думать о контролере как о контроллере всего. Если вы воспользуетесь этим подходом, то я думаю, что это прекрасно, если он знает о нескольких репозиториях / сервисах.

Подход с главным репозиторием работает так же, как и на стороне контроллера, требуется меньше инстанцирования, но он немного менее точен в том, что вы делаете, и заставляет контроллер больше полагаться на внутренние знания репозитория / службы.

...