Spring jpa 实体和动态调度

Spring jpa entity and dynamic dispatching

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

现在问题来了,使用 Hibernate 我会检索 Dog 的实例,在 Dog 的方法 makeVoice() 中我会调用 HumanService,但它是 Spring bean,单例。我应该如何设计? Injecting/Autowiring HumanService 似乎在污染 Cat/Dog,但这必须动态解决。我想不出在外面设计这个分辨率的方法。有这样的方法吗?

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

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

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

如果混合使用这两种方式让您感到厌烦,请不要使用 DDD,而是使用按服务设计:DogService 使用以狗作为参数的方法与 HumanService

进行通信