我正在使用Spring,hibernate for my。对于更新,我致电repo.findById(id)
以获取当前实例,然后调用model.setXXX()
更新字段,最后repo.save(mdl)
将其保存回来。对于删除,我调用repo.remove(id)
,现在我的更新和删除都是状态驱动的,并且可能会对我的模型进行状态更改,有时,根据状态,不允许执行某些操作(如删除)。我如何以这样的方式实现这些行为,即这个逻辑基本上在域模型中并且不会泄漏到存储库实现?
答案 0 :(得分: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)
}
您似乎不喜欢上面列出的方法,因为
...逻辑基本上在域模型内并且不泄漏 存储库实现
我认为您不应该担心域泄漏到存储库实现中。无论如何,这是不可避免的,数据访问层(repo实现)无论如何都对域对象有深入的了解,否则它将无法对它们进行水合。您应该担心的是反向 - “数据访问泄漏到域中”,这不会发生在上面的代码中。