Как реализовать несколько - PullRequest
       10

Как реализовать несколько

0 голосов
/ 16 октября 2018

Я добавил код репозитория и вызвал его в HomeController.cs

 public class HomeController : Controller
 {
     private IPlatformRepository _platformRepository;

     public HomeController()
     {
         this._platformRepository = new PlatformRepository(new IoTSimulatordbContext());    
     }

     public HomeController(IPlatformRepository platformRepository )
     {
         this._platformRepository = platformRepository;    
     }

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

 public class HomeController : Controller
 {
     private IPlatformRepository _platformRepository;
     private IDeviceRepository _deviceRepository;

     public HomeController()
     {
         this._platformRepository = new PlatformRepository(new IoTSimulatordbContext());
         this._deviceRepository = new DeviceRepository(new IoTSimulatordbContext());
     }

     public HomeController(IPlatformRepository platformRepository, IDeviceRepository deviceRepository)
     {
         this._platformRepository = platformRepository;
         this._deviceRepository = deviceRepository;

     }

это правильный способ сделать?

public HomeController()
{
    this._platformRepository = new PlatformRepository(new IoTSimulatordbContext());

    this._deviceRepository = new DeviceRepository(new IoTSimulatordbContext());
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если вы спрашиваете о синтаксисе, то я не вижу никаких проблем ... если вы спрашиваете о дизайне и передовых методах, тогда рассмотрите следующие моменты:

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

  2. Еще один хороший вопрос в вашем вопросе о количестве зависимостей в контроллере.Для этого я бы сослался на 2-й закон Никола IoC : см. Здесь

Любой класс, имеющий более 3 зависимостейдолжен быть допрошен за нарушение SRP

Ваш контроллер имеет зависимость от 2 репозиториев, так что хорошо ... но если у вас более 3 зависимостей, хорошо бы рассмотреть рефакторинг.Если вам интересно, как реорганизовать репозитории, рассмотрите следующее:

  • Определите Совокупные корни вашего домена и создайте единый репозиторий для совокупного корня ... такпо сути, вы комбинируете связанные типы в одном хранилище.

  • Вы можете объединить репозитории в больший блок (сервис) ... теперь класс высокого уровня (контроллер) зависит от вашего сервиса, а сервис в свою очередь зависит от одного илибольше репозиториев.

0 голосов
/ 16 октября 2018

Да, нормально создавать экземпляр IoTSimulatordbContext дважды.Если ваше приложение становится больше, вы можете получить некоторые ошибки, потому что один и тот же экземпляр используется в нескольких местах, а не в потоке.Кроме того, управление экземплярами таким образом требует от вас правильного управления удалением экземпляров.

Я рекомендую вам использовать внедрение зависимостей (используйте Autofac или Ninject) - это поможет вам управлять созданием экземпляров классов и избавляться от них.,Так что ваш конструктор с DI будет выглядеть так

public class HomeController : Controller
 {
     private readonly IPlatformRepository _platformRepository;
     private readonly IDeviceRepository _deviceRepository;


     public HomeController(IPlatformRepository platformRepository, IDeviceRepository deviceRepository)
     {
         this._platformRepository = platformRepository;
         this._deviceRepository = deviceRepository;

     }
...