2011-02-07 7 views
1

親と子の間の関連付けを行うときに、以下のコードが複雑になります。親子データモデルオブジェクトを関連付ける最も良い方法は何ですか?

質問:親子データモデルオブジェクトを関連付ける最も良い方法は何ですか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Linq.Expressions; 
using ConsoleApplication1; 

class Child 
{ 
    public string Name { get; set; } 
    public Parent Parent { get; set; } 
} 


class Parent 
{ 
    public string Name { get; set; } 
    public IEnumerable<Child> Children { get; set; } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     Parent p1 = new Parent { Name = "P1" }; 

     Child c1 = new Child { Name = "C1" }; 
     c1.Parent = p1; 

     Child c2 = new Child { Name = "C2" }; 
     c2.Parent = p1; 


     List<Child> children = new List<Child>(); 
     children.Add(c1); 
     children.Add(c2); 

     p1.Children = children; 
    } 

} 

答えて

5

をたぶんあなたには、いくつかの基本的なをカプセル化するクラスにいくつかのヘルパーメソッドを実装する必要があります考えて:

public class Parent { 

.... 
    public void AddChild(Child child) { 
     child.Parent = this; 
     this.Children.Add(child); 
    } 

    public void RemoveChild(Child child) { 
     child.Parent = null; 
     this.Children.Remove(child); 
    } 
} 


public class Child { 
    private Child() {} 

    public static Child CreateChild(Parent parent) { 
     var child = new Child(); 
     parent.AddChild(child); 
     return child; 
    } 
} 
+0

私は削除しますChildコンストラクタのchid.Parent = parent、parent.AddChildはそれを既に行います。ちょうどあなた自身を繰り返す。おそらく子のコンストラクタをプライベートにして、入力とその他のプロパティとして親をとるクリエータメソッドを追加し、子を作成し、親のAddChildメソッドを使用します(これをシングルトンにしましょう)。 – hazimdikenli

+0

すぐに書き留めました。そのために残念... – MacX

1
class Parent 
{ 
    ... 
    public Child AddChild(string name) 
    { 
    return this.AddChild(new Child(name)); 
    } 

    public Child AddChild(Child c) 
    { 
    c.Parent = this; 
    this.children.Add(c); 

    return c; 
    } 
} 
関連する問題