我正在开发一个项目,其中每个类通常包含另一个类的实例列表。这在几个层上重复,因此Class1将包含Class2实例的列表,而Class2实例将包含Class3实例的列表,依此类推。
我希望每个班级尽可能独立和独立,以便在不同的项目中重复使用。
但是,在这种体系结构中,通常情况下,来自上层的类不仅需要访问较低层的对象,而且还需要存储它们的元数据,这些元数据对于关联的对象应该是不可见的。这不仅发生在相邻的层上,而且也发生在彼此远离的层。我想知道有什么可能的正确方法,因为我担心我现在使用的那个不是最好的。
我想到的解决方案是:
其他可能的解决方案是什么?
就像上瘾信息一样,我用C ++编写项目代码,但这与我的问题无关。
编辑: 这是一个更好地解释我的意思的例子:
假设我们有A和B类,它们是已完成的和独立的类。然后我们有C类,它是A类实例集合的管理者。为此,它需要存储有关它正在管理的A的每个实例的成瘾信息。
此外,我们有D类,它包含类C的实例和类B中的对象集合。最后一个类需要能够将类B的每个实例与类A的一个实例相关联(它由受控的C类实例管理,,反之亦然。
C和D所需的信息将在何处以及如何存储在此示例中?
答案 0 :(得分:0)
我认为你的一般问题是你想要A的实例和B的实例加上每个的额外元数据。所以让WrappedA和WrappedB类保存对A的引用,并保留您需要的任何元数据。
Public class A
{
}
public class WrappedA
{
private A _underlyingInstance;
public WrappedA(A instanceToWrap)
{
_underlyingInstance = instanceToWrap;
SetAdditionalMetaData();
}
protected SetAdditionalMetaData()
{
//use _underlyingInstance to set meta data
}
}
然后,而不是让类型A的列表具有包裹类型的列表A.
public class C
{
private List<WrappedA> _myAs = null;
public C(A[] rawAs)
{
_myAs = new List<WrappedA>();
foreach(A a in rawAs)
{
_myAs.Add(new WrappedA(a);
}
}
}
无论您需要添加到包装类中的任何方法,都要执行此操作。如果您需要存储有关AXB的特殊信息,那么似乎Ds对此负责。 D可以创建一个以[A_B]为键的字典,然后在值中存储关于AXB组合的任何数据。
希望有所帮助。