2016-12-30 105 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)。

但是不要误解我的意思,这并不意味着你的域对象不应该包含任何逻辑。