Короче говоря, вы должны применять это бизнес-правило непосредственно в вашей модели. В вашем случае, прямо в свойстве получателя и установщика MonthlyRent. Мы все знаем, насколько это сложно, с множеством проверок и уровней безопасности; так вот для чего предназначены спецификации.
В пьесе DDD представлена концепция Технические характеристики , предназначенная именно для того, чтобы сфокусировать свет на самой модели. Сначала вы устанавливаете свой геттер и сеттер, как описано выше, чтобы получить функциональность. Затем, во время рефакторинга, постарайтесь сделать модель чище, абстрагируя длинный код получения / установки в классы спецификации.
Employee employee =
employeeRepository.findEmployee(employeeID);
Specification employeeCanModifyRent = new
Specification(
new EmployeeHasAccessToManagement()
, new EmployeeHasAccessToMoney());
if(employeeCanModifyRent.isSatisfiedBy(employee))
{
rentService.changeRent();
}
else
{
throw new exception("Access denied.");
}
Чтение кода делает совершенно очевидным, что именно делает код. Это основная концепция DDD сама по себе. Спецификации должны быть очень простыми и понятными.
Этот код взят из Дизайн, управляемый доменом. Быстро , краткое и быстрое чтение для DDD. Это действительно короткая и приятная книга о DDD, которая требует чтения в течение нескольких часов. Всего 100 страниц или около того.