Я использую Spring, спящий режим для моего . Для обновления я вызываю repo.findById(id)
, чтобы получить текущий экземпляр, затем вызываю model.setXXX()
, чтобы обновить поля, и, наконец, repo.save(mdl)
, чтобы сохранить его обратно. Для удаления я вызываю repo.remove(id)
, теперь и мое обновление, и удаление управляются состоянием и могут привести к изменению состояния моих моделей, а иногда, в зависимости от состояния, определенные действия, такие как удаление, не разрешены. Как мне реализовать это поведение таким образом, чтобы эта логика по существу находилась в рамках моделей предметной области и не просачивалась в реализацию репозитория?
обновление, удаление моделей доменов
comment
Кто-то может сказать, что репозиторий является частью модели предметной области (по крайней мере, ее интерфейса). Как вы передаете удаление (это паршивый термин, поскольку вряд ли кто-то так его называет) в постоянное хранилище, зависит от вас.
- person Yves Reynhout   schedule 12.08.2012
Ответы (1)
Я бы сделал что-то вроде этого:
// entity
class User{
...
bool CanBeArchived(){
// check whether objects can be archived based
// on the rules and state that you mention
}
...
}
// repository
interface UserArchiver{
// implementation calls 'CanBeArchived' and throws if it fails
void Archive(User user)
}
Кажется, вам не нравится описанный выше подход, потому что
... логика по существу находится в моделях предметной области и не просачивается в реализацию репозитория
Я не думаю, что вам следует беспокоиться о утечке домена в реализацию репозитория. В любом случае это неизбежно, уровень доступа к данным (реализация репозитория) в любом случае имеет глубокие знания об объектах предметной области, иначе он не сможет их гидратировать. Что вас должно беспокоить, так это обратное - «утечка доступа к данным в домен», и этого не происходит в приведенном выше коде.
person
Dmitry
schedule
14.08.2012