Сущность (скажем, UserEntity) имеет жесткие правила для своих свойств, и она может существовать в 2 состояниях - постоянная (что означает, что она имеет id
) и предварительно сохраненная (что означает, что она не имеет id
пока).
Согласно ответу на на этот вопрос о том, как обрабатывать требуемые свойства , "настоящая" UserEntity должна создаваться только с id
, переданным его конструктору.
Однако, когда мне нужно создать new UserEntity
из информации, отправленной браузером, я должен иметь возможность проверить информацию, прежде чем продолжить в БД.
Раньше я просто создавал пустую UserEntity (без id
), устанавливал новые свойства и проверял их - но в этом новом, более безопасном способе мышления о сущностях мне не следовало бы когда-либо создавать новый UserEntity без id
.
Я не хочу создавать ДВЕ места, которые знают, как проверять свойства моей UserEntity, потому что если они когда-либо изменятся (и они будут), это будет удвоить код для обновления и удвоить шансы на ошибки.
Как эффективно централизовать знания о валидации свойств моей сущности?
Примечание
Одна идея, которая у меня возникла, отражена в этом вопросе , в котором я рассматриваю хранение свойств, не связанных с состоянием, таких как электронная почта, пароль и имя, в объекте стандартизированных значений, который будет знать о правилах для его свойств, которые различные сервисы, такие как Controller, Validator и Repo или Mapper, могут использовать.