2012-03-16 6 views
0

У меня есть 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 раньше времени, который я могу передать в мой репозиторий для сохранения.

ответ

3

Если вам небезразлична действительность ваших объектов домена, вам необходимо обеспечить достоверность во все времена.

Это означает, что вы не предоставляете сеттеры по свойствам, которые вы не хотите изменять напрямую, но используйте указанные методы для изменения их состояния.

Если номер id в вашем примере никогда не изменяется, вы должны только установить его в конструкторе (и обеспечить его передачу).

+0

Спасибо за ответ! В этом случае, очевидно, скорее всего, не будет методов для правильной коррекции «id»? – johnnietheblack

+0

@johnnietheblack - Из нормального контекста «id», да. Вы бы предоставили метод для свойств, которые мутируют, но должны быть проверены. – Oded

+0

спасибо :) имеет смысл и чувствует себя прекрасно воздухонепроницаемым. – johnnietheblack

Смежные вопросы