我正在尝试以面向对象的方式设计一个类,但没有看到任何好的选择。
我有一个包含对象,需要包含值列表。
因此包含对象中的每一行都可以被视为一个列表。
该包含对象的列数可能不同。
我不确定如何设计一个列表类来支持不同的列选项。
根据某些参数,该类可能有 x4 列数据,在其他情况下可能有更多或更少。
通常只是寻找一些关于保存可变数量数据的对象的设计指南(不是列表长度,而是几乎列表类型,如果我的图像没有太大意义,请参阅下面提供的代码)
我尝试创建一个包含对象,其中包含抽象基类的列表。
我不喜欢这种方法的是,我必须为可以包含的每种类型的组合(我的图片中的列数)创建一个具体的类,因此 EntryCombo A 有 4 个值(因为它会有 4 列。EntryCombo B 只有 2 个值,因为它有 4 列。
我基本上想知道是否有更好的方法来做到这一点,这样我就不需要知道每种组合或类型。
public class ContainingObject<TEntryType>
where TEntryType : Entries
{
public List<TEntryType> RowEntries { get; } = new List<TEntryType>();
}
public abstract class Entries
{
// Base Class
}
public class EntryComboA : Entries
{
public int ValueA { get; set; }
public int ValueB { get; set; }
public int ValueC { get; set; }
public int ValueD { get; set; }
}
public class EntryComboB : Entries
{
public int ValueA { get; set; }
public int ValueB { get; set; }
}
在没有更多信息的情况下,很难给出明确的答案。没有一刀切的答案。在该范围的一个极端,您可以将任何数据库行建模为字典。列名是键,该键的字典值是行的列值。
在另一个极端,您可以使用 访问者模式 来建模每一行都是 n 子类型之一,其中 n 是固定的,并且所有子类型在编译时都是已知的。
一个好的设计需要理解所涉及的权衡,并在字典和访问者之间选择一个位置。