更新,删除域模型

时间:2012-08-09 12:43:01

标签: domain-driven-design ddd-repositories

我正在使用Spring,hibernate for my。对于更新,我致电repo.findById(id)以获取当前实例,然后调用model.setXXX()更新字段,最后repo.save(mdl)将其保存回来。对于删除,我调用repo.remove(id),现在我的更新和删除都是状态驱动的,并且可能会对我的模型进行状态更改,有时,根据状态,不允许执行某些操作(如删除)。我如何以这样的方式实现这些行为,即这个逻辑基本上在域模型中并且不会泄漏到存储库实现?

1 个答案:

答案 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实现)无论如何都对域对象有深入的了解,否则它将无法对它们进行水合。您应该担心的是反向 - “数据访问泄漏到域中”,这不会发生在上面的代码中。