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);
}
}
}
}
Это попытка инкапсулировать простое правило в моей доменной модели. Правило, которое я пытаюсь записать: когда по какой-то причине мы обновляем дату рождения человека (например, произошла ошибка в первоначальном вводе данных пользователем), нам нужно проверить место рождения человека и заменить его другим значением из базы данных, если оно указано в нашей базе данных как особое место рождения.
Однако у меня есть две проблемы с реализацией этого правила:
Это правило изменяет состояние доменной сущности (свойство), и мне нужно отразить это изменение в пользовательском интерфейсе. Моя доменная модель - POCO. Я мог бы поместить эту логику в ViewModel, но это неправильно, потому что это не логика пользовательского интерфейса. Это важное правило домена, которое мне нужно отразить.
Мой список SpecialBirthPlaces довольно большой, и я не хочу пополнять его каждый раз, когда получаю клиента из базы данных. Кроме того, мне нужно получить замену для Birthplace, когда правило выполнено. Как я уже сказал, список особых мест рождения и замен для них очень большой и хранится в БД.
Как реализовать нужную мне логику в стиле DDD?