У меня есть UserEntity, который в конечном итоге сохраняется в БД согласно его id
свойствам. В этом случае свойство id
, очевидно, чувствительно, так как его изменение приведет к тому, что UserEntity будет сохранено по другому UserEntity, если оно будет сохранено позже.Как обрабатывать требуемые свойства для доменных объектов?
Поэтому я хотел бы, чтобы помочь безопасным защититься от чего-то, как это происходит ...
Вариант 1. Должен ли я Силы по id
быть передан в конструктор, тем самым удаляя сеттер?
- Это будет означать, что каждый UserEntity что Repository дается упорствовать будет действовать (поскольку она имеет минимальное требование к
id
). - Недостатком является то, что мой контроллер не сможет создать новый UserEntity(), потому что у него не было бы
id
его.
Вариант 2. Разрешить Id в конструкторе быть пустым, но не обеспечивают сеттер
- Это по существу создать два типа UserEntity объектов: те, которые были сохранялись, и те, нет.
- Я мог бы сделать новый UserEntity() где угодно, заполнить его его значениями, затем передать в репозиторий, который затем сохранит его, создаст новый UserEntity с новым
id
и вернет его. - Это классно, но мне нужно дважды проверить, что у моего объекта есть
id
в любом месте, где я хочу использовать его для сохранения/логики домена/etc, чтобы убедиться, что это сохраненная сущность.
Вариант 3. Разве я не так много волнуюсь и предоставляю ему сеттер?
- Это подвергает риску изменения
id
в виде UserEntity и перезапись другой UserEntity в БД. - С другой стороны, я могу создать новый UserEntity(), не зная
id
раньше времени, который я могу передать в мой репозиторий для сохранения.
Спасибо за ответ! В этом случае, очевидно, скорее всего, не будет методов для правильной коррекции «id»? – johnnietheblack
@johnnietheblack - Из нормального контекста «id», да. Вы бы предоставили метод для свойств, которые мутируют, но должны быть проверены. – Oded
спасибо :) имеет смысл и чувствует себя прекрасно воздухонепроницаемым. – johnnietheblack