我正在实现一棵树,将其视为文件夹结构,因此我有一个如下所示的类:
public class Folder
{
//Various Props like Name etc.
public IList<Folder> Children{get;}
public Folder Parent {get;}
}
现在我想要的是能够在树上上下走动,所以给定一个根我可以找到一个叶子,给定一个叶子我可以找到根节点。所以每个孩子都需要父母。现在的问题是向树中添加新节点的最佳方法是什么。我过去使用过两种解决方案:
- 将 AddChild(Folder) 方法添加到处理添加文件夹的文件夹,并可以设置父级。这个问题是我现在必须锁定我的 Children 集合,这样你就不能绕过这个方法。
- 创建我自己的 Children 集合,该集合将获得对实例的引用,因此它可以处理在添加时设置父级。这个问题我必须实现一个新的集合。
- 使用在添加或删除项目时具有事件的集合。
我很好奇人们通常使用什么模式,然后是否有人对我的特定用例有任何建议。我正在使用 nHibernate 将我的树持久化到 SQL 服务器。我宁愿不实现自定义集合,因为它需要很多代码才能使它适用于我的应用程序的一小部分。