public class Person
{
public IList<String> SpecialBirthPlaces;
public static readonly DateTime ImportantDate;
public String BirthPlace {get;set;}
public DateTime BirthDate
{
set
{
if (BirthPlace!=null &&
value < ImportantDate &&
SpecialBirthPlaces.Contains(BirthPlace))
{
BirthPlace = DataBase.GetBirthPlaceFor(BirthPlace, value);
}
}
}
}
Это попытка инкапсулировать простое правило в моей модели домена. Правило, которое я пытаюсь сделать, заключается в следующем: когда мы по какой-то причине обновляем дату рождения человека (например, была ошибка в исходном вводе пользователя), нам нужно проверить место рождения человека и заменить его каким-либо другим значением из базы данных, если она указана в нашей базе данных в качестве специального места рождения.
Однако у меня есть 2 проблемы, реализующих его:
-
Это правило изменяет состояние (свойство) сущности домена, и мне нужно отразить это изменение в пользовательском интерфейсе. Моя модель домена - POCO. Я мог бы поместить эту логику в ViewModel, но это неправильно, потому что это не логика UI. Это важное правило домена, которое мне нужно захватить.
-
Мой список SpecialBirthPlaces довольно большой, и я не хочу заполнять его каждый раз, когда я получаю клиента из базы данных. Кроме того, мне нужно получить замену для места рождения, когда правило будет выполнено. Как я уже сказал, список специальных мест рождения и замены для этого очень велик и хранится в БД.
Как реализовать логику, которая мне нужна в стиле DDD?