0

我正在为我的 . 对于更新,我调用repo.findById(id)以获取当前实例,然后调用model.setXXX()更新字段,最后repo.save(mdl)将其保存回来。对于删除,我称之为repo.remove(id),现在我的更新和删除都是状态驱动的,并且可能会在我的模型上带来状态变化,有时,基于状态,某些操作(如删除)是不允许的。我如何以这种逻辑本质上在域模型中并且不会泄漏到存储库实现的方式来实现这些行为?

4

1 回答 1

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

于 2012-08-14T18:29:48.620 回答