2016-12-30 97 views
2

我使用ORM/ODM(morphia)來管理我的模型,但我遇到了一個問題:依賴注入與數據庫模型

模型的構造僅僅呼籲創建的對象(new MyObject(dep1, dep2)),並且不會從db加載(db.get(id))。

如何將不可序列化的依賴項注入ORM管理的對象?

我一直注入依賴關係直接到需要它的任何方法即ie。

public void doSomething(UserDAO userDAO) { ... } 

但是,這很快就會導致難看的代碼。有沒有更好的辦法?

+2

通常,您不會將DAO交給域對象。操作DAO的代碼寧可駐留在應用程序的適當架構層中的某些服務中。在這種情況下,您可以將DAO注入到服務中,並將其與服務代碼中的域對象/模型一起使用。如果您必須保持架構原樣,讓我們​​看看是否有人知道一個巧妙的技巧來影響morphia中的對象創建。 – JayK

+0

本網站依據提問回答和接受流程而生活。由於您是新來賓,請不要忘記接受答案,請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work瞭解更多詳情。 –

回答

0

如果您想在加載它們之後爲您的實體設置不可序列化的依賴關係,那麼您可以使用生命週期註釋@PostLoad[Life Cycle Methods]

在示例

@PostLoad 
void postLoad() { 
    userDAO = // e.g. new UserDAO() or UserDAO.getInstance(); 
} 

雖然這是可能的,我不說,這是一個不錯的辦法。您應該考慮分離您的實體(域對象)和服務功能(應用層)(請參閱SoC)。

但是不要誤解我的意思,這並不意味着你的域對象不應該包含任何邏輯。