我不确定问题的名称,所以如果不正确或误导,请原谅。
我正在尝试在模型和在它们上实现的接口之间扩展抽象体系结构。我首先展示一个简单的例子,然后我将转向需要一些帮助的东西。
好的,所以我有一个人界面与它对应的类模型:
public interface IPersonModel<T>
where T : ICompany
{
T Company { get; set; }
}
public class PersonModel : IPersonModel<Company>
{
public CompanyModel Company { get; set; }
}
public class CompanyModel : ICompany
{
public string Name { get; set; }
}
因此,如果模型类只有一个复杂类型的属性,那么上面的代码效果很好。因此可以很容易地在Manager方法中使用:
public interface IPersonManager
{
Task<IEnumerable<IPersonModel<CompanyModel>>> GetPersonData();
}
这让我想到了我的实际问题。假设模型类更复杂,例如:
public interface IPersonModel<T, T2, T3>
where T : ICompany
where T2 : IDog<BreedModel>
where T3 : ICar
{
T Company { get; set; }
T2 Dog { get; set; }
T3 Car { get; set; }
}
这将导致更新PersonModel
类:
public class PersonModel : IPersonModel<Company, Dog, Car>
{
public CompanyModel Company { get; set; }
public DogModel Dog { get; set; }
public CarModel Car { get; set; }
}
让我们不要忘记Dog
模型类:
public class DogModel : IDog<BreedModel>
{
public string Name { get; set; }
public BreedModel Breed { get; set; }
}
public class BreedModel : IBreed
{
public string Attributes { get; set; }
public void GetBreedData()
{
// ...
}
}
这将导致管理器方法被消耗,如:
public interface IPersonManager
{
Task<IEnumerable<IPersonModel<CompanyModel, DogModel, CarModel>>> GetPersonData();
}
我想知道是否有更好的方法来做到这一点。如果模型中存在嵌套的复杂类型属性,则可能会变成非常繁琐的练习。如果模型具有4或5甚至10个复杂类型属性,它将变成非常大的通用实现。
提前致谢!
所有这些麻烦的原因,简而言之,试图完成以下架构: