Spring jpa实体和动态调度

时间:2016-08-26 14:29:06

标签: java spring jpa strategy-pattern

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

现在问题是,Hibernate我将检索Dog的实例,在Dog的方法makeVoice()中我会调用HumanService,但它是Spring bean,singleton。我该如何设计呢?注入/自动装配HumanService似乎是在对Cat / Dog进行监管,但这必须动态解决。我无法想出一种在外面设计这个解决方案的方法。有这样的方式吗?

1 个答案:

答案 0 :(得分:1)

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

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

关于混合spring bean和JPA实体,它看起来确实有点尴尬,不是在逻辑上,而是在你使用两个不同的库在同一个类上编织行为的事实上。
JPA没有'使用Spring来实例化实体,所以你应该使用技巧来做到这两点。 如果你可以避免在实体中使用Spring而不增加额外逻辑的大量开销,我认为你的设计可以更清晰。否则,请使用技巧。

如果混合使您烦恼,请不要使用DDD但使用服务设计:DogService使用带有狗的方法作为参数与HumanService进行通信