2012-08-09 119 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。無論如何,這是不可避免的,數據訪問層(回購實現)無論如何都有關於域對象的知識,否則它將無法爲它們提供水分。你應該擔心的是一個反向 - '數據訪問泄露到域',這在上面的代碼中沒有發生。