背景
在交易系统的设计中,往往会在核心订单上引入状态机的设计。外部事件驱动订单状态翻转,并触发调用一系列的其他服务。
这样,在处理核心订单的代码中,往往会有很多调用其他服务的代码。
基于状态机的设计,引入Spring AOP技术,在主订单状态发生变化的时候,通知到其他模块。关心订单此状态的业务模块处理变更事件。
模块之间解耦
订单处理方法
@TradeStatusChange(entryStatus = TradeStatus.NEW, expectStatus = {TradeStatus.TO_CUTOFF, TradeStatus.TO_CANCEL_PAYMENT}, statusField = "tradeStatus", beanClass = BuyTradeDetailDTO.class)
public BuyTradeDetailDTO dealNewTradeRecord(BuyTradeDetailDTO tradeDetailDTO) {
tradeDetailDTO.setTradeStatus(TradeStatus.FAIL);
buyTradeDetailDao.update(tradeDetailDTO);
Around状态入参出