У меня есть сотрудник с несколькими адресами в коллекции.
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 я мог бы перебирать существующие адреса и выдавать исключение.
Но так как это бизнес-правило необходимо проверять на уровне представления, чтобы показать сообщение пользователю, не должен ли я использовать для этого спецификацию, которую я могу использовать как внутри, так и на уровне представления?
Как бы вы решили это?