Bri*_*eon 2 c# collections nested-class
我不确定是否已经存在这样的术语,但是为了这个问题,我们定义两个术语:对等实现或嵌套实现来说明如何在包含许多父/子实体关系的数据模型中实现集合类.
我使用术语peer来描述你在模型层中实现集合类的场景,以及实体类本质上使它们在你的API中成为对等体,如下所示:
public class ParentEntity
{
private ChildEntityCollection children;
}
public class ChildEntity
{
}
public class ChildEntityCollection : ICollection<ChildEntity>
{
}
Run Code Online (Sandbox Code Playgroud)
这里的主要优点是您可以在碰巧存储相同类型子级的其他实体类中重用该集合类.
我使用术语嵌套来描述你将它们实现为嵌套类的场景,如下所示:
public class ParentEntity
{
private ChildEntityCollection children;
public class ChildEntityCollection : ICollection<ChildEntity>
{
}
}
public class ChildEntity
{
}
Run Code Online (Sandbox Code Playgroud)
这里的主要优点是每个父级都可以实现自己的集合类,以最适合该特定父级的方式存储其子级.例如,一个父实体可能会发现一个数组数据结构运行良好而另一个可能使用一个splay树(我知道这个模糊不清,但它很好地说明了我的观点).
我注意到Microsoft在各种.NET相关框架中使用了这两种习惯用法.System.Windows.Forms命名空间似乎很大程度上依赖于嵌套实现.我倾向于发现自己也喜欢这种方法,即使它需要更多的工作.
建议,评论,替代想法?
无论Microsoft过去做过什么,当前的.NET API设计指南都不鼓励创建在父类之外可见的嵌套类.有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms229027.aspx.