gpt4 book ai didi

java - Spring jpa实体和动态调度

转载 作者:行者123 更新时间:2023-12-01 09:33:45 25 4
gpt4 key购买 nike

我有实体动物。它有两个 child :狗和猫。动物可以 makeVoice(),但猫和狗的做法不同。

现在有一个问题,使用 Hibernate 我会检索 Dog 的实例,在 Dog 的 makeVoice() 方法中我会调用 HumanService,但它是 Spring bean,单例。我应该如何围绕这个进行设计?注入(inject)/ Autowiring HumanService 看起来像是污染猫/狗,但这必须动态解决。我想不出一种方法可以在外面设计这个分辨率。有这样的办法吗?

最佳答案

如果您的动物调用服务,您的设计似乎是领域驱动的,但并不完全。如果你有 DDD,我不会将其称为 HumanService,因为有 Service 后缀。我想象狗不会直接与人交流。

我认为您应该尝试通过服务层或域对象之间的通信进行推理,而不是它们的混合。当然,在 DDD 中,您可以拥有服务,但当它相关时,不能用于域的两个对象之间的通信。

关于混合 spring beans 和 JPA 实体,看起来确实有点尴尬,不是在逻辑上,而是在你使用两个不同的库在同一个类上编织行为的事实。
JPA 不使用Spring 实例化实体,因此您应该使用技巧来完成这两件事。如果您可以避免在实体中使用 Spring,而不需要增加大量开销来添加逻辑,我认为您的设计可能会更干净。否则,请使用技巧。

如果混合两者让您烦恼,请不要使用 DDD,而是使用服务设计:DogService 使用以狗作为参数的方法与 HumanService 进行通信

关于java - Spring jpa实体和动态调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com