【发布时间】:2010-10-20 14:24:44
【问题描述】:
在我的一个项目中,我有一个车库课程。
该类包含许多集合,例如地址、银行帐户、会员资格等。
所有这些集合类都具有有效性。这意味着地址可以在用户指定的时间段内有效。可以添加新的地址或银行账户,但有效期不允许与其他记录的有效期重叠。
所以,我所做的是让 Garage 类成为聚合根。地址等可以通过方法添加。每次添加记录时,我都会检查要添加的记录是否会与集合中已经存在的其他有效期重叠。
像这样:
protected internal void AddAddress(Address address)
{
Check.Require(new IsUniqueValiditySpecification<Address>(
this.addresses.ToList()).IsSatisfiedBy(address),
"The validity period intersects with the one of an existing address");
...
}
这就是聚合根的用途吗?或者我也可以将地址设为聚合根并使其包含对车库的引用。然后每次设置有效性时,我都可以执行以下操作:
public virtual Validity Validity
{
get { return validity; }
set {
Check.Require(new IsUniqueValiditySpecification<Address>(
this.garage.Addresses.ToList()).IsSatisfiedBy(this),
"The validity period intersects with the one of an existing address");
validity = value;
}
}
还是我错过了聚合根的全部意义?有人可以告诉我一些例子,聚合根的全部目的是什么。就像一个示例,它向我展示了与某些标准方法相比聚合根可以完成的工作。一个真实的例子,展示了使用聚合根解决了哪些确切的设计问题。
谢谢。
【问题讨论】:
标签: design-patterns domain-driven-design