使用结构的子集

Val*_*rog 3 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; }
}
Run Code Online (Sandbox Code Playgroud)

现在我必须独立填充数据列表,这是我在这里存储的子集.数据结构看起来像这样:

public class CraneSubModel
{
    public string Name { get; set; }
    public long? MaxLoad { get; set; }
    public long? MaxSpan { get; set; }
    public long? Speed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想知道这里最好的方法是什么.它是好的形式CraneModel,只是忽略其他变量?或者制作一个可以容纳这些数据的新结构?关于任何一种解决方案

  • 如果CraneModel使用并且必须在某一天进行更改,这可能导致必须重新编写列表,甚至可能为其创建新结构.
  • 使用CraneSubModel似乎是多余的,因为已经存在一个可以保存这些精确数据的结构,并且它可能变得难以维护(如果有一天我需要,Name并且MaxLoad,这种确切的情况会出现,并且每次使用新结构会使事情变得非常复杂).

Eni*_*ity 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; }
}
Run Code Online (Sandbox Code Playgroud)


D-S*_*hih 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; }
}
Run Code Online (Sandbox Code Playgroud)

  • 我同意.首选[组合而不是继承](https://en.wikipedia.org/wiki/Composition_over_inheritance). (2认同)