首页 > 解决方案 > 当对相似对象使用通用算法时,哪种继承/组合模式是合适的?

问题描述

我有一个小代码来反序列化具有多个键/值列表的 json,在其中两个列表中包含新元组,按字母键对列表项进行排序,然后再次重新生成 json 文件,包括按键排序的新元组。

我使用了一个基类来完成所有这些工作,子类的继承非常小,以指定其各自列表的名称(我需要这个过程来包含来自 json 文件的两个列表中的元素,我们称它们为“集合”和“隶属关系”)。

我目前的班级结构很简单:

class ValueList 
{
     string name;
     List<ValueItem> data;
}

class ValueItem
{
    string key;
    string value;
}

这些是我用来序列化/反序列化 json 文件的类型。

问题是现在我只需要在其中一个列表中包含一个附加字段,即“Sets”列表的一个名为“sequence”的字段。每次添加值项时,此“序列”字段将始终具有“集合”列表中的总项数。

我试图添加一个包含键和值属性的接口 IValueItem 并在 ValueList 上使用泛型 + 扩展 ValueItem 类(添加“sequence”字段的 SetValueItem 类),但在尝试转换 SetValueItem 时出现几个编译器错误到泛型 ValueItem 类型,并且在最好的情况下,将反序列化对象转换为泛型对象时,我有一个空对象。

我还考虑过 ValueItem 类型的组合(通过动态添加“序列”字段),但我也不确定这是否是正确的方法,因为我还必须处理添加的“序列”的行为字段作为通用算法的一部分,但仅适用于“集合”列表,而不是“从属关系”列表,这让我感到困惑。

在这些情况下是否有任何适当的模式可以遵循?

提前致谢,

标签: jsoninheritancecomposition

解决方案


推荐阅读