包含对象设计

问题描述 投票:0回答:1

我正在尝试以面向对象的方式设计一个类,但没有看到任何好的选择。

我有一个包含对象,需要包含值列表。
因此包含对象中的每一行都可以被视为一个列表。
该包含对象的列数可能不同。

我不确定如何设计一个列表类来支持不同的列选项。
根据某些参数,该类可能有 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; }
    }
c# oop database-design
1个回答
0
投票

在没有更多信息的情况下,很难给出明确的答案。没有一刀切的答案。在该范围的一个极端,您可以将任何数据库行建模为字典。列名是键,该键的字典值是行的列值。

在另一个极端,您可以使用 访问者模式 来建模每一行都是 n 子类型之一,其中 n 是固定的,并且所有子类型在编译时都是已知的。

一个好的设计需要理解所涉及的权衡,并在字典和访问者之间选择一个位置。

© www.soinside.com 2019 - 2024. All rights reserved.