私はツリーをフォルダ構造と考えて実装しているので、次のようなクラスがあります。
public class Folder
{
//Various Props like Name etc.
public IList<Folder> Children{get;}
public Folder Parent {get;}
}
今私が望むのは、ツリーを上下に移動できるようにすることです。これにより、ルートが与えられれば葉を見つけることができ、葉が与えられればルートノードを見つけることができます。したがって、子供にはそれぞれ親が必要です。問題は、新しいノードをツリーに追加する最良の方法は何かということです。過去に2つのソリューションを使用しました。
- フォルダーの追加を処理し、親を設定できる AddChild(Folder) メソッドを Folder に追加します。これに関する問題は、このメソッドをバイパスできないように、 Children コレクションをロックする必要があることです。
- インスタンスへの参照が与えられる独自の Children コレクションを作成して、追加時に親の設定を処理できるようにします。これに関する問題は、新しいコレクションを実装する必要があります。
- アイテムが追加または削除されたときにイベントを持つコレクションを使用します。
人々が一般的にどのようなパターンを使用しているか、そして私の特定のユースケースについて何か提案があるかどうかに興味があります。nHibernate を使用してツリーを SQL サーバーに永続化しています。アプリケーションの非常に小さな部分である何かに対してこれを機能させるには多くのコードがあるため、カスタムコレクションを実装したくありません。