У меня проблема с моей структурой MVP, которая основана на общих докладчиках, представлениях и т. Д., И я чувствую, что нарушаю DRY, и я не знаю, как обойти это.
Пример.
public class Presenter<TView, TModel>
where TView : IView
where TModel : Model
{}
Пока все хорошо, но я хочу, чтобы это было так
public class Presenter<TView, TModel>
where TView : IView
where TModel : Model
{}
public class Model<T>
{
public T Value { get;set; }
}
Но это не скомпилируется, потому что для Model требуется универсальный параметр.
Исправление:
public class Presenter<TView, TModel, TModelType>
where TView : IView
where TModel : Model<TModelType>
{}
И я чувствую, что нарушаю всухую, например
public class MyPresenter : Presenter<IMyView, MyModel, string>
{}
public class MyModel : Model<string>
{}
Мне неловко указывать тип струны дважды: у ведущего и у модели,
Я только не хочу указывать, что докладчик использует MyModel в качестве модели, мне все равно, какой тип модели (дженерики). Одно из решений состоит в том, чтобы удалить общее ограничение для модели, но тогда я не могу создать общую иерархию классов модели, которую я хочу.
Не думаю ли я обо всем, что связано с MVP / дженериками?