2012-08-09 93 views
0

我使用Spring,为我的冬眠。对于更新,我呼叫repo.findById(id)以获取当前实例,然后调用model.setXXX()更新字段,最后,repo.save(mdl)将其保存回来。对于删除,我打电话repo.remove(id),现在我的更新和删除都是由状态驱动的,并且可能会在我的模型上引起状态更改,有时根据状态,不允许某些操作(如删除)。我如何去实现这些行为,使得这种逻辑本质上属于领域模型,并且不会泄漏到存储库实现中?更新,删除域模型

+0

有些人可能会说存储库是域模型的一部分(至少是它的接口)。如何将删除(这是一个糟糕的术语,因为这几乎不是任何人称之为的)与永久存储器交流取决于您。 – 2012-08-12 17:54:57

回答

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) 
} 

你似乎并不喜欢上述的方法,因为

...逻辑在本质上是域模型内不泄漏到 存储库实施

我不认为你应该担心域泄漏到存储库实现entation。无论如何,这是不可避免的,数据访问层(回购实现)无论如何都有关于域对象的知识,否则它将无法为它们提供水分。你应该担心的是一个反向 - '数据访问泄露到域',这在上面的代码中没有发生。