C#组合类/模型或使用继承创建多个类

本文关键字:继承 创建 组合 模型 | 更新日期: 2023-09-27 18:25:58

这是一个非常基本的问题,但它一直困扰着我。我应该将类似的Model属性组合到一个class Model中吗?还是最好将它们拆分并在有意义的地方添加继承?我倾向于只返回每个请求所需的数据,但当数据量较小时,我会对此提出质疑。最好用一个例子来解释。

我有一个web应用程序,可以进行各种AJAX调用。许多调用返回IEnumerables

public class GroupBaseModel {
    public int GroupId { get; set; }
    public int GroupName { get; set; }
}
public class RoleBaseModel
{
    public int RoleId { get; set; }
    public int RoleName { get; set; }
}
public class GroupMemberModel : GroupBaseModel
{
    public bool IsMember { get; set; }
}
public class GroupRoleBaseModel {
    public int GroupId { get; set; }
    public int GroupName { get; set; }
    public int RoleId { get; set; }
    public int RoleName { get; set; }
}

我有一些调用在几个不同的页面上返回这些类中每个类的IEnumerables。一些调用只返回GroupRoleModel,而另一个调用将返回GroupRoleBaseModel等(此时每个调用都提取每个请求所需的最小数据)

所以我的第一个问题是,是否可以连接两个现有的类?例如,GroupRoleBaseModel只是GroupBaseModel+GroupRoleModel的属性,我可以在不重新实现所有属性的情况下将它们组合起来吗?

第二个问题是,既然我们谈论的是非常小的类,我应该像下面这样使用一个类吗?即使有些请求会返回不需要的数据?

public class GroupBaseModel {
    public int GroupId { get; set; }
    public int GroupName { get; set; }
    public int RoleId { get; set; }
    public int RoleName { get; set; }
    public bool IsMember { get; set; }
}

谢谢你的想法!

C#组合类/模型或使用继承创建多个类

由于语言限制,C#中不可能实现多类继承。

您的选项是。

  1. 将2个类嵌套到一个容器类中
  2. 使用包含这两个属性的1个类(为了代码清晰起见,可能会拆分为2个分部类
  3. 使用继承链,在每个父类上使用最常见的属性
  4. 使用接口实现"多重继承"模拟

这实际上取决于您的用例。但要确保复制的属性尽可能少。例如,在您的情况下,不要在GroupRoleBaseModel上再次写入所有属性,而是选择一个要继承的属性。

    public class GroupBaseModel
{
    public int GroupId { get; set; }
    public int GroupName { get; set; }
}
public class RoleBaseModel
{
    public int RoleId { get; set; }
    public int RoleName { get; set; }
}
public class GroupMemberModel : GroupBaseModel
{
    public bool IsMember { get; set; }
}
public class GroupRoleBaseModel : GroupBaseModel
{
    public int RoleId { get; set; }
    public int RoleName { get; set; }
}

每种选择都有其优缺点,尽管我知道没有什么是你想要的。

将所有属性包含在一个类中没有错,但为什么要返回所有数据呢?您可以只编写多个函数来填充所需的属性。

"是否可以连接两个现有类"是的,您可以使用动态。没有现成的解决方案,我甚至不建议尝试这样做。

我应该像下面一样使用一个类吗
要回答这个问题,问问自己。将来更改GroupBaseModel类的原因有多少。如果你有一个以上,你需要分开。继续下去,直到所有的模型类都只有一个改变的理由。