是否建议将多个服务注入到一个类中?

时间:2019-01-04 19:19:18

标签: java spring dependency-injection

我要执行大约10-15个顺序的API调用才能完成操作。

每个API都有自己的单独的服务实现类,以获取其相应的响应。为了处理所有这些API,我将所有这15个类自动连接到一个类中,并逐个执行。

通过查看代码,我觉得该方法并不是实现该方法的一种不错的方法。

您能否建议这样做是否可行或通过其他方式美化实施?

我的实现是: 我进行有15项服务的预订操作,该服务将被依次调用。根据每个服务的成功响应,该链将继续到下一个。在这种情况下,我使用BookingServiceImpl将所有这15个服务注入了@Autowired中。那么,我的实现是正确的吗?还有其他比这更好的方法吗?

1 个答案:

答案 0 :(得分:1)

不,这绝对不对。

依赖15个依赖项的类从未经过精心设计,并且违反了the single responsibility principle。这种类所在的系统可以称为tightly coupled

尽管the chain of responsibility pattern带来了更多的抽象性和复杂性,但它可能会大大改善当前的设计。组件之间可能耦合良好,每个组件仅执行一项工作,并且不了解整个过程。可能没有单个类可以控制整个过程。您可以让Spring负责链中的顺序,该顺序将在运行时变成动态重新排列和重新配置的实体。

我会给你一个非常抽象的片段,我将遵循的方向:

if ( is_product_tag() ) {  
remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar', 10);}

请注意,Spring及其元信息如何降低耦合程度。例如,interface Booking { // methods required at any stage of processing } interface BookingProcessor { void process(Booking booking); } @Service("BookingSourceDataService") class BookingSourceDataService implements BookingProcessor { @Autowired @Qualifier("CustomerValidationService") private BookingProcessor nextProcessor; @Override public void process(Booking booking) { // fetch booking source data, populate the Booking object nextProcessor.process(booking); } } @Service("CustomerValidationService") class CustomerValidationService implements BookingProcessor { @Autowired @Qualifier("CustomerCreationService") private BookingProcessor nextProcessor; @Override public void process(Booking booking) { // validate customer, populate the Booking object nextProcessor.process(booking); } } 不知道其下一个预订处理器是什么。