【问题标题】:Dependency Injection with database models使用数据库模型进行依赖注入
【发布时间】:2023-04-02 06:13:01
【问题描述】:

我正在使用 ORM/ODM (morphia) 来管理我的模型,但我遇到了问题:

模型的构造函数仅在创建对象时调用(new MyObject(dep1, dep2)),从数据库加载时不调用(db.get(id))。

如何将不可序列化的依赖注入到 ORM 管理的对象中?

我一直将依赖项直接注入到任何需要它的方法中,即。

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

但这很快就会导致丑陋的代码。有没有更好的办法?

【问题讨论】:

  • 通常你不会将 DAO 交给域对象。操作 DAO 的代码宁愿驻留在应用程序适当架构层中的某些服务中。在这种情况下,您可以将 DAO 注入到服务中,并将其与服务代码中的域对象/模型一起使用。如果你必须保持架构不变,让我们看看是否有人知道一个巧妙的技巧来影响 morphia 中的对象创建。
  • 这个网站以提问回答和接受流程为生。由于您是新来的,请不要忘记接受答案,请参阅meta.stackexchange.com/questions/5234/… 了解更多详情。

标签: java mongodb design-patterns dependency-injection orm


【解决方案1】:

如果您想在加载实体后为其设置不可序列化的依赖项,则可以使用生命周期注释@PostLoad[Life Cycle Methods]

举例

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

虽然这是可能的,但我并不是说这是一个好方法。您应该考虑将实体(域对象)和服务功能(应用层)分开(参见SoC)。

但不要误会我的意思,这并不意味着您的域对象根本不应该包含任何逻辑。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2017-03-23
    • 2017-06-12
    • 2022-08-12
    • 2015-09-26
    • 2014-01-19
    • 2014-03-25
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多