正确构建模型和接口之间的抽象

时间:2016-08-24 09:32:19

标签: c#

我不确定问题的名称,所以如果不正确或误导,请原谅。

我正在尝试在模型和在它们上实现的接口之间扩展抽象体系结构。我首先展示一个简单的例子,然后我将转向需要一些帮助的东西。

好的,所以我有一个人界面与它对应的类模型:

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个复杂类型属性,它将变成非常大的通用实现。

提前致谢!

所有这些麻烦的原因,简而言之,试图完成以下架构:

enter image description here

0 个答案:

没有答案