【发布时间】:2010-01-28 15:57:33
【问题描述】:
我想知道在处理父子关系时,以下哪一项被认为是最佳做法。
1) 下面的例子看似是一种常见的做法,但是当创建一个child的实例时,只要不添加到parent中就会处于无效状态。这会不会导致验证等问题。
public class Parent
{
private ICollection<Child> children;
public ReadOnlyCollection Children { get; }
public void AddChild(Child child)
{
child.Parent = this;
children.Add(child);
}
}
public class Child
{
internal Parent Parent
{
get;
set;
}
public Child()
{
}
}
2) 下一个样本将注意孩子必须始终与其父母相关。
public class Parent
{
private ICollection<Child> children;
public ReadOnlyCollection Children { get; }
public Child CreateChild()
{
var child = new Child();
child.Parent = this;
children.Add(child);
return child;
}
}
public class Child
{
internal Parent Parent
{
get;
set;
}
internal Child()
{
}
}
3) 在最后一个例子中,孩子自己处理与父母的关系。
public class Parent
{
private ICollection<Child> children;
public ReadOnlyCollection Children { get; }
public void AddChild(Child child)
{
child.Parent = this;
children.Add(child);
}
}
public class Child
{
public Parent Parent
{
get;
set;
}
public Child(Parent parent)
{
this.Parent = parent;
}
}
哪种模式被认为是最好的?我相信模式 2 可能是最好的,因为从那时起,如果没有与父母的关系,孩子就永远无法存在。这将使其更容易,例如在实现可能执行以下操作的规范模式时:
public class ChildSpecification
{
bool IsSatisfiedBy(Child child)
{
return child.Parent.Children.Where(someCondition).Count > 0;
}
}
上述规范只有在孩子有父母的情况下才有效。
你怎么看?你知道更好的方法吗?提前致谢
【问题讨论】:
标签: c# java .net domain-driven-design