Является ли хорошим примером наличие универсального интерфейса для реализации классов 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.