我不确定是否已经有一个命名法,但是为了这个问题,让我们定义两个术语:对等实现或嵌套实现来说明如何在包含许多父/子实体关系的数据模型中实现集合类。
我使用术语对等来描述您在模型层中实现集合类以及实体类本质上使它们在您的 API 中对等的场景,如下所示:
public class ParentEntity
{
private ChildEntityCollection children;
}
public class ChildEntity
{
}
public class ChildEntityCollection : ICollection<ChildEntity>
{
}
这里的主要优点是您可以在碰巧存储相同类型的孩子的其他实体类中重用集合类。
我使用嵌套这个术语来描述您将它们实现为嵌套类的场景,如下所示:
public class ParentEntity
{
private ChildEntityCollection children;
public class ChildEntityCollection : ICollection<ChildEntity>
{
}
}
public class ChildEntity
{
}
这里的主要优点是每个父级都可以实现自己的集合类,以针对特定父级最优化的方式存储其子级。例如,一个父实体可能会发现数组数据结构运行良好,而另一个父实体可能会使用展开树(我知道这很模糊,但它很好地说明了我的观点)。
我注意到微软在各种 .NET 相关框架中都使用了这两种习惯用法。System.Windows.Forms 命名空间似乎严重依赖嵌套实现。我倾向于发现自己也更喜欢这种方法,即使它需要更多的工作。
建议、评论、替代想法?