このための命名法がすでにあるかどうかはわかりませんが、この質問のために、ピア実装またはネストされた実装という 2 つの用語を定義して、多くの親子エンティティ関係を含むデータ モデルにコレクション クラスを実装する方法を説明します。
ピアという用語を使用して、エンティティ クラスと一緒にモデル レイヤーにコレクション クラスを実装し、基本的に 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
{
}
ここでの主な利点は、各親が独自のコレクション クラスを実装して、その特定の親に最も最適化された方法で子を格納できることです。たとえば、ある親エンティティは配列データ構造が適切に機能することを発見し、別の親エンティティはスプレイ ツリーを使用する場合があります (よくわかりませんが、私の要点をよく示しています)。
Microsoft がさまざまな .NET 関連のフレームワークで両方のイディオムを使用していることに気付きました。System.Windows.Forms 名前空間は、入れ子になった実装に大きく依存しているようです。より多くの作業が必要ですが、私もこの方法を好む傾向があります。
推奨事項、コメント、代替案はありますか?