Я думаю, что проблема, с которой вы здесь столкнетесь, заключается в том, что, хотя все это хорошо и хорошо объединяет интерфейсы, если у вас есть интерфейс, вам действительно нужно что-то, чтобы потреблял этот интерфейс.Вы этого не сделали, вы специализировали тип, реализовав этот интерфейс, но какие типы будут использовать этот интерфейс в качестве входных данных напрямую?Вот пример:
public interface IService<TModel>
{
TModel Get(string id);
}
public class MyService : IService<MyModel>
{
public MyModel Get(string id)
{
// Work
}
}
var service = new MyService();
var model = service.Get("something");
Выше, хотя я определил интерфейс для службы, я фактически не зависим от этой службы в коде.Я все еще зависим от конкретной реализации IService<TModel>
: MyService
.
Мой код не должен заботиться о том, что такое MyService
, он должен заботиться только о том, чтобы он мог поддерживать операции, определенные IService<TModel>
.Если бы мы произвели рефакторинг так:
public class ModelFactory<TModel>
{
IService<TModel> _service;
public ModelFactory(IService<TModel> service)
{
_service = service;
}
public TModel Get(string code)
{
return _service.Get(code);
}
}
Теперь у меня есть класс, который может использовать мой интерфейс и позволяет мне отделить реализацию от моего кода:
var factory = new ModelFactory<MyModel>(new MyService());
var model = factory.Get("something");
Обычно вы 'Я бы сделал что-нибудь с IoC / DI, чтобы добавить зависимость, но я надеюсь, что это яркий пример.