項目中的if else太多了,該怎麼重構

 

需求:在一個應用的開發過程中,將應用一步步推至不同的節點,最終推至上線節點

功能:將迭代階段推進到下一階段,根據下一階段不同,做不同處理

 

解析:進入下一階段  /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.csdn.net/zzti_erlie/article/details/102988486

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章