【发布时间】:2017-01-11 15:10:48
【问题描述】:
我正在构建一个 Spring 应用程序,其中每个实体(Person)可以执行 3 个任务,例如,Walk、Talk & Think。
由于所有这些都是 Person 的某种能力,我正在考虑制作一个接口 Capability.java,它将有一个方法 performTask()。
以上 3 个类将实现 Capability.java 并且还将有自己的一组其他特定方法。
由于这 3 个类都是动词,所以我将它们设为 @Service,即
- WalkServiceImpl.java
- TalkServiceImpl.java
- ThinkServiceImpl.java
另外,我正在考虑制作一个@Controller - PersonController,它将调用这三个类中的performTasks()。
要在PersoneController 中使用这些类,我必须自动装配它们。作为一般惯例,我们应该始终@Autowire 接口。
但是这里 3 个类有一个公共接口,我无法使用它调用控制器中所有 3 个服务的 performTaks()。
所以,我的问题是,我应该怎么做(A 或 B)?:
A.另外制作3个独立的接口,即。 WalkService, TalkService & ThinkService,它扩展了 Capability.java 并在控制器中自动装配这些类?
B.直接在控制器中自动装配WalkServiceImpl, TalkServiceImpl & ThinkServiceImpl?
【问题讨论】:
-
你只能使用一个接口,你可以这样命名bean:stackoverflow.com/questions/5576128/…
-
您真的需要能够交替使用这些功能吗?否则,我认为您通过创建 Capability 接口过度设计了您的应用程序。
-
@DavidPérezCabrera,我阅读了您建议的帖子,但仍然没有完全理解。你能帮我举个例子吗?
标签: java spring design-patterns