使用结构子集

时间:2018-07-11 08:01:20

标签: c# oop

我有以下课程:

public class CraneModel
{
    public long? Id { get; set; }
    public long? IDType { get; set; }
    public long? IDManufacturer { get; set; }
    public string Name { get; set; }
    public long? MaxLoad { get; set; }
    public long? MaxSpan { get; set; }
    public long? Speed { get; set; }
}

现在,我必须独立填充一个数据列表,该列表是我在此处存储的数据的子集。数据结构如下所示:

public class CraneSubModel
{
    public string Name { get; set; }
    public long? MaxLoad { get; set; }
    public long? MaxSpan { get; set; }
    public long? Speed { get; set; }
}

我想知道什么是最好的方法。使用CraneModel并忽略其他变量是一种好形式吗?还是建立一个可以容纳这些数据的新结构?关于这两种解决方案的一些想法。

  • 如果使用CraneModel,并且有一天必须更改,则此 也可能导致必须重新整理列表,甚至 一个新的结构。
  • 使用CraneSubModel似乎是多余的,因为已经存在一个 可以保存这些确切数据的结构,因此可能很难 保持(如果有一天我只需要NameMaxLoad, 确切的情况将会出现,并且每次都使用新的结构 会使事情变得非常复杂)。

2 个答案:

答案 0 :(得分:5)

在我看来,您拥有这个对象模型(尽管有类名):

public class CraneSubModel
{
    public string Name { get; set; }
    public long? MaxLoad { get; set; }
    public long? MaxSpan { get; set; }
    public long? Speed { get; set; }
}

public class CraneModel : CraneSubModel
{
    public long? Id { get; set; }
    public long? IDType { get; set; }
    public long? IDManufacturer { get; set; }
}

答案 1 :(得分:5)

我建议您使用composite,因为它可以减少CraneSubModelCraneModel的耦合。

如果有一天您修改CraneSubModel不会直接影响CraneModel

public class CraneSubModel
{
    public string Name { get; set; }
    public long? MaxLoad { get; set; }
    public long? MaxSpan { get; set; }
    public long? Speed { get; set; }
}

public class CraneModel
{
    public long? Id { get; set; }
    public long? IDType { get; set; }
    public long? IDManufacturer { get; set; }
    public CraneSubModel subModel { get; set; }
}