项目中的if else太多了,该怎么重构

本文探讨了在项目中遇到大量if else的情况,以如何重构为背景,详细介绍了推进应用至不同开发节点(dev, sit, pre, online)时的不同处理策略,包括打包、同步服务配置、审批流等操作,并提到了通过不同处理器(如DevTurnNextProcessor, OnlineTurnNextProcessor)进行逻辑分离。推荐相关文档以供参考。" 113424314,10540099,MySQL主从同步与binlog机制详解,"['数据库管理', 'MySQL复制', 'binlog机制']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

需求:在一个应用的开发过程中,将应用一步步推至不同的节点,最终推至上线节点

功能:将迭代阶段推进到下一阶段,根据下一阶段不同,做不同处理

 

解析:进入下一阶段  /rleaseProcess/turnNext.json

下一状态是:

dev:

1),调用node接口,触发打包。node回调更新应用地址

2),调用我们stable 同步服务配置,同步页面配置接口。

3),同步完成后,更新迭代stage

sit:

1),同步迭代信息

2),更新迭代stage

pre:

1),触发审批流,更新审批流表

2),审批完成后,回调时更新迭代stage

online:

加事务:

1),将当前Online更新为Offline

2),将新的更新为Online,同时更新上次迭代字段,用于回滚时使用

其他:

只更新迭代状态

 

代码:

1、xml中配置流程推进处理器

<!-- 迭代流程推进处理器 -->
<bean id="ReleaseProcessService"
class="com.mybank.bketensdp.biz.share.service.ReleaseProcessServiceImpl">
    <property name="turnNextProcessorMap">
		<map>
			<entry key="DEV" value-ref="devTurnNextProcessor"/>
			<entry key="SIT" value-ref="sitTurnNextProcessor"/>
			<entry key="PRE" value-ref="preTurnNextProcessor"/>
			<entry key="GRAY" value-ref="defaultTurnNextProcessor"/>
			<entry key="ONLINE" value-ref="onlineTurnNextProcessor"/>
			<entry key="STABLE" value-ref="defaultTurnNextProcessor"/>
		</map>
	</property>
</bean>

2、接口

public interface ReleaseProcessService {

    /**
     * 发布状态推进
     * @param releaseOrder
     */
    void turnNext(ReleaseOrder releaseOrder);

}
@Service
public class ReleaseProcessServiceImpl implements ReleaseProcessService {

    private Map<String, AbstractTurnNextProcessor> turnNextProcessorMap;

    @Override
    public void turnNext(ReleaseOrder releaseOrder) {     
        // 根据参数releaseOrder获取不同的key
        String key = "DEV"
        // 根据xml中的key获取相应处理器, 不存在报错
        AbstractTurnNextProcessor processor = turnNextProcessorMap.get(key);
        // 执行处理
        processor.doTrunNext(releaseOrder);

    }

    /**
     * Getter method for property <tt>turnNextProcessorMap</tt>.
     *
     * @return property value of turnNextProcessorMap
     */
    public Map<String, AbstractTurnNextProcessor> getTurnNextProcessorMap() {
        return turnNextProcessorMap;
    }

    /**
     * Setter method for property <tt>turnNextProcessorMap</tt>.
     *
     * @param turnNextProcessorMap value to be assigned to property turnNextProcessorMap
     */
    public void setTurnNextProcessorMap(
            Map<String, AbstractTurnNextProcessor> turnNextProcessorMap) {
        this.turnNextProcessorMap = turnNextProcessorMap;
    }

}

3、推进器接口

public abstract class AbstractTurnNextProcessor {

    public abstract void doTrunNext(ReleaseOrder releaseOrder);

}
DefaultTurnNextProcessor
public class DefaultTurnNextProcessor extends AbstractTurnNextProcessor {

    @Override
    public void doTrunNext(ReleaseOrder releaseOrder) {
        // TODO 更新迭代stage

    }
}

  DevTurnNextProcessor

public class DevTurnNextProcessor extends AbstractTurnNextProcessor {

    @Override
    public void doTrunNext(ReleaseOrder releaseOrder) {

        // 调用node

        //打包
           
        //更新地址

        //更新迭代stage


    }
}

  OnlineTurnNextProcessor

public class OnlineTurnNextProcessor extends AbstractTurnNextProcessor {

    @Override
    public void doTrunNext(ReleaseOrder releaseOrder) {
        // TODO
    }
}

目录:

 

 

推荐文档:https://blog.youkuaiyun.com/zzti_erlie/article/details/102988486

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值