質問

私には既にある場合は名称このためにもこの問題で定義第二に、 ピア 実施または 入れ子 実施例かを実装するコレクションクラスのデータを格納するモデルの多くの親子実体の関係。

私は、ピアの記述のシナリオが実施するコレクションクラスのお層モデルについて、そのエンティティに授業は基本的にいい仲間とお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
{
}

の主な利点はそれぞれが独自のレクションクラスに店舗その子どもたちに最も適したことを特定します。例えば、親会社をもたらす可能性もある配列データ構造のものは他の利用分岐ツリー(曖昧ないものを示した点)がありました。

いということに気付きファイルの両方を使用熟語のさまざまです。純関連の枠組みのシステム。Windowsの場合です。形名前空間のように大きく依存して入れ子になります。しがないかを調べ自分preferingこの方法も必要とされる。

推薦コメント代替の考えになりますか。

役に立ちましたか?

解決

にかかわらず、Microsoftが過去に行ってきたかもしれないものの、現在の.NET APIの設計ガイドラインは、親クラスの外部から見えている入れ子になったクラスの作成を阻止します。 http://msdn.microsoft.com/en-us/library/ms229027を参照してください。 .aspxのの詳細ます。

他のヒント

別のオプションは、巣に子クラスでコレクションクラスで、単にコレクションという名前を付けます。こうすることで、あなたは常に名前としてChild.Collectionを取得します。

public class Child
{
  public class Collection : ICollection<Child>
  {
  }
}

public class Parent
{
  private Child.Collection children;
}
個人的に私は、ピア実装を好む、それは私が、ネストされた実装がないとは思わないコードの再利用を促進します。別のクラスは、同じ要素のコレクションを格納する別の方法を実装する必要がある場合、別のクラスを容易にコードの再利用を制限することなく、そのシナリオのために実装することができる。

は、ネストされたセットアップは、親クラスにしっかりと結合するために、コードを一部の開発者を導くことができます。

私はまた、ピアのアプローチを好みます。あなたがのことはありませんの(その場合には、それはプライベートネストされたクラスでなければなりません。)外その親クラスのそれを使用する

意志がない限り巣にない理由は、コレクションは本当にありません
論理的に子実体を含むことができ、ドメインモデルで唯一のエンティティがある場合、私は、ネストされた配列を使用します。

たとえば、あなたが持っていた場合PieceOfMailクラスと郵便物のコレクションクラス

  class PieceOfMail { } 
  class MailPieces: Collection<PieceOfMail> { }
私は「ピア」技術を使用したいので、

は、その後ShipingCompanyクラス、およびメールボックスのクラス、およびポストオフィスクラス、およびMailrouteのクラス、およびMailManBagクラス、ALL、郵便物として型指定された構成プロパティを持つことができます。

しかし、あなたはPostageDiscountの種類を表すクラス、および出荷に適用される割引のセットを表すコレクションクラスを持っていた場合大藤、同じドメインで、それが唯一のShipmentTransactionクラスは論理的にできると場合がありますこれらの割引のコレクションが含まれている、そして私は、ネストされた技術を使用したい...

あなたは本当にChildEntityCollectionが必要ですか?なぜ提供されたコレクション型を使わないのでしょうか?

  //why bother?
//public class ChildEntityCollection : ICollection<ChildEntity>{}

public class ParentEntity
{
   //choose one
  private ChildEntity[] children;
  private List<ChildEntity> childrenInList;
  private HashSet<ChildEntity> childrenInHashSet;
  private Dictionary<int, ChildEntity> childrenInDictionary;
   // or if you want to make your own, make it generic
  private Balloon<ChildEntity> childrenInBalloon;
}
public class ChildEntity
{
}

私は一般的に、特定のコレクションクラスを生成しないようにしてください。時には、あなたは特別なクラスを必要とするかもしれませんが、多くの場合、あなたは単にCollection<T>名前空間からReadOnlyCollection<T>System.Collection.ObjectModelような一般的なクラスを使用することができます。これは、入力の手間を節約できます。すべてのあなたのコレクションはIEnumerable<T>などから派生し、簡単にLINQと統合されています。あなたの要件に応じて、あなたはまた、ICollection<T>または別のコレクションインターフェイスとしてあなたのコレクションを公開して、特定の要件を持つクラスは、高度に最適化されたジェネリックコレクションを使用してみましょうことができます。

public class ParentEntity {

  Collection<ChildEntity> children = new Collection<ChildEntity>();

  public Collection<ChildEntity> Children {
    get {
      return this.children;
    }
  }

}

また、このようなIList<T>ラップすることができます:

public class ParentEntity {

  // This collection can be modified inside the class.
  List<ChildEntity> children = new List<ChildEntity>();

  ReadOnlyCollection<ChildEntity> readonlyChildren;

  public ReadOnlyCollection<ChildEntity> Children {
    get {
      return this.readOnlyChildren
        ?? (this.readOnlyChildren =
              new ReadOnlyCollection<ChildEntity>(this.children));
    }
  }

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top