我要执行大约10-15个顺序的API调用才能完成操作。
每个API都有自己的单独的服务实现类,以获取其相应的响应。为了处理所有这些API,我将所有这15个类自动连接到一个类中,并逐个执行。
通过查看代码,我觉得该方法并不是实现该方法的一种不错的方法。
您能否建议这样做是否可行或通过其他方式美化实施?
我的实现是:
我进行有15项服务的预订操作,该服务将被依次调用。根据每个服务的成功响应,该链将继续到下一个。在这种情况下,我使用BookingServiceImpl
将所有这15个服务注入了@Autowired
中。那么,我的实现是正确的吗?还有其他比这更好的方法吗?
答案 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);
}
}
不知道其下一个预订处理器是什么。