обновление, удаление моделей доменов

Я использую Spring, спящий режим для моего . Для обновления я вызываю repo.findById(id), чтобы получить текущий экземпляр, затем вызываю model.setXXX(), чтобы обновить поля, и, наконец, repo.save(mdl), чтобы сохранить его обратно. Для удаления я вызываю repo.remove(id) , теперь и мое обновление, и удаление управляются состоянием и могут привести к изменению состояния моих моделей, а иногда, в зависимости от состояния, определенные действия, такие как удаление, не разрешены. Как мне реализовать это поведение таким образом, чтобы эта логика по существу находилась в рамках моделей предметной области и не просачивалась в реализацию репозитория?


person redzedi    schedule 09.08.2012    source источник
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