Это хороший дизайн для разрешения конкретных классов с универсальными интерфейсами для внедрения зависимостей? - PullRequest
0 голосов
/ 10 сентября 2018

Является ли хорошим примером наличие универсального интерфейса для реализации классов Concrete и использования универсального интерфейса для разрешения в контейнере.
Меня беспокоит, нарушает ли он принцип единой ответственности или он тесно связан с реализацией.

Например,

  //Base Generic Interface
  public interface IBaseServiceCrud<T>
    {
    T Get(string key);
    bool Create (T entity);
    bool Delete(T Entity);
    }

   // Implement Concrete Class with Base Interface 
    public class Order : IBaseServiceCrud<Order>
    { }
    public class Product: IBaseServiceCrud<Order>
    { }


   //Or Should we have a interface specific to each service
   public interface IOrder: IBaseServiceCrud<Order>
   {}

 //And then Implement by Concrete Class
  public class Order : IOrder
  {}

В поддержке контейнера DI разрешено использование Generic Interface, но меня беспокоит, что это хорошая практика для разрешения на основе интерфейса Generic.

1 Ответ

0 голосов
/ 11 сентября 2018

Реализация шаблона репозитория таким способом не редкость, и у вас, вероятно, не возникнет никаких проблем с этим (см. Также Шаблон репозитория Стандартизация методов ).

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

...