中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么實現一個流程編排框架

發布時間:2022-03-22 16:49:23 來源:億速云 閱讀:1911 作者:iii 欄目:大數據

今天小編給大家分享一下java怎么實現一個流程編排框架的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

流程注冊

之前有講到要支持yml、properties、xml、json、接口的形式注冊流程模型,為了體現職責單一原則,我們需要把一種格式解析的邏輯獨立處理,為了體現對擴展開發,對修改關閉原則,我們先定義一組接口,然后通過工廠模式提供對應的實現邏輯;這里工廠是使用者,通過接口調用具體的實現,實現在這里是提供者,又是一組策略模式

java怎么實現一個流程編排框架

流程加載

流程加載我們需要知道其他的幾個需求功能點:1、提供對外統一訪問接口;2、提供執行記錄和執行耗時;3、不同流程節點需要定義不同的解析器;4、通過工廠創建解析類型;5、流程節點按照順序執行。

java怎么實現一個流程編排框架

通過不同的節點類型執行不同的解析方式,顯而易見這里需要用工廠模式去做解析類創建,而且需要做到對外擴展開發對修改關閉,新增節點不用動其他代碼邏輯,只要在工廠函數里面添加一個節點解析器;同時我們這里定義一個Map集合用于在加載工廠函數的時候就把解析對象創建,而不用每次解析的時候再去創建解析器,減少不必要的內存

代碼如下:

public class NodeComponentFactory {

   private final static Map<String,NodeParser> cacheParser = new HashMap<>();

   static {
       cacheParser.put(NodeParserEnum.method.name(),new MethodNodeComponent());
       cacheParser.put(NodeParserEnum.bean.name(),new BeanNodeComponent());
       cacheParser.put(NodeParserEnum.condition.name(),new ConditionNodeComponent());
       cacheParser.put(NodeParserEnum.service.name(),new ServiceNodeComponent());
       cacheParser.put(NodeParserEnum.subflow.name(),new SubFlowNodeComponent());
   }

   public static NodeParser getNodeInstance(String nodeName){
       return cacheParser.get(nodeName);
   }
}

當我們發現每一種節點解析類型都需要去實現parser接口,而且每個節點都有類似的步驟,那我們這里就要考慮用抽象工廠,也符合一個依賴倒置的的設計原則,上層模塊通過依賴接口訪問,下次模塊繼承抽象類,同時也用到了策略模式做接口調用;在實現的邏輯過程我們會發現很多步驟是重復的,比如初始化入參、執行記錄,所有我們把重復的內容放到抽象類,通過模板模式的方式,讓流程節點只關注解析層面;

public abstract class AbstractNodeComponent implements NodeParser{

   public Map<String, Node> nodeMap;


   /**
    * 初始化參數
    * @param inputUrl
    * @param baseInput
    * @return
    */
   public BaseInput initInput(String inputUrl, BaseInput baseInput){
       BaseInput baseInputTarget = ClassUtil.newInstance(inputUrl, BaseInput.class);
       BeanUtils.copyProperties(baseInput,baseInputTarget);
       return baseInputTarget;
   }


   /**
    * 解析節點信息
    * @param node 節點信息
    * @param baseInput 請求參數
    * @param baseTemp 臨時上下文
    * @return
    */
   public BaseOutput parserNode(Node node, BaseInput baseInput, BaseTemp baseTemp){
       baseTemp.setFlowRecord(baseTemp.getFlowRecord().append(FlowConstants.NODEKEY+FlowConstants.NODE+FlowConstants.COLON+node.getId()));
       BaseOutput baseOutput = parser(node, baseInput, baseTemp);
       return baseOutput;
   };

   @Override
   public void setNodeMap(Map<String, Node> nodeMap) {
       this.nodeMap = nodeMap;
   }

   @Override
   public abstract BaseOutput parser(Node node, BaseInput baseInput, BaseTemp baseTemp);

}

流程加載順序

流程執行我們需要把組件分的很細,最好是獨立實現一個功能的類劃分成一個組件,體現職責單一原則,也只要把執行功能劃分的很細,才能在流程執行的各個流程中靈活組合;在下面流程圖中可以看到幾個組件,第一個是流程統一執行的入口,這里會有兩個地方會用到,第一個就是給外部調用的接口,第二個是子流程執行的入口;第二個組件是節點統一加載管理組件也就是上文提到的工廠類;第三個就是每個組件自己的解析器,用于實現不同類型節點的操作;在設計的過程中一定知道 流程 、管理、節點之間的邊界,減少耦合,只有這樣不同的組件才能靈活組成。

java怎么實現一個流程編排框架

以上就是“java怎么實現一個流程編排框架”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

敖汉旗| 蒲江县| 东乌珠穆沁旗| 峡江县| 公安县| 临邑县| 寿光市| 蒲江县| 双鸭山市| 阳曲县| 洞口县| 铁岭市| 金平| 鸡东县| 韶山市| 甘孜| 宝应县| 吕梁市| 雅安市| 明星| 营口市| 芜湖县| 赣榆县| 临安市| 安达市| 庄河市| 阜康市| 习水县| 田阳县| 芦溪县| 酉阳| 乃东县| 合江县| 汝阳县| 玛纳斯县| 文安县| 五指山市| 望城县| 曲沃县| 桂平市| 车致|