gpt4 book ai didi

java - 建议将多个服务注入(inject)到一个类中吗?

转载 作者:行者123 更新时间:2023-11-30 05:50:08 26 4
gpt4 key购买 nike

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

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

通过查看代码,我觉得该方法对于此实现来说不是一个不错的方法。

您能否建议这是否可以或任何其他方式来美化实现?

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

最佳答案

不,这无论如何都不对。

依赖 15 个依赖项的类从来都不是精心设计的,并且违反了 the single responsibility principle 。此类所在的系统可以称为 tightly coupled .

虽然the chain of responsibility pattern带来更多的抽象和复杂性,它可能会显着改善当前的设计。这些组件可以很好地解耦,每个组件执行一项工作并且不知道整个过程。可能没有一个类控制整个过程。您可以让 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);
}

}

注意 Spring 及其元信息如何降低耦合级别。例如,BookingSourceDataService 不知道它的下一个预订处理器是什么。

关于java - 建议将多个服务注入(inject)到一个类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044800/

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