【发布时间】:2010-01-20 11:08:32
【问题描述】:
我有一个员工在一个集合中拥有多个地址。
public class Employee
{
public string Name { get; set; }
public AddressCollection Addresses { get; }
}
public class AddressCollection : IEnumerable<Address>
{
private readonly Employee employee;
private IList<Address> items = new List<Address>();
public void AddAddress(Address address)
{
if (items.Contains(address)) return;
address.Employee = employee;
items.Add(address);
}
public void RemoveAddress(Address address)
{
items.Removce(address);
}
/// further IEnumerable implementations
}
public class Address
{
public AddressType Type { get; set; }
public City City { get; set; }
public string Street { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime ValidTo { get; set; }
}
public enum AddressType
{
Default,
ShippingAddress
}
一次只能有一个特定类型的地址有效。因此,当添加一个从 1-1-2009 到 15-1-2009 有效的默认类型地址,然后添加另一个从 10-1-2009 到 15-1-2009 有效的默认类型地址时,需要引发异常。
从 DDD 的角度来看,最好的方法是什么?当然,在 AddAddress 方法 中,我可以遍历现有地址并抛出异常。
但由于需要在表示层检查此业务规则以向用户显示消息,我不应该为此使用可在内部以及在表示层中使用的规范吗?
你会如何解决这个问题?
【问题讨论】:
标签: .net nhibernate design-patterns domain-driven-design