日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从案例角度解析建模平台动态规则引擎

發布時間:2023/12/4 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从案例角度解析建模平台动态规则引擎 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源寶導讀:明源云ERP建模平臺提供了強大的頁面聯動規則引擎,原來需要編寫代碼完成的聯動控制邏輯,現在只需要點點鼠標,通過配置完成。本文從實際案例的角度出發,介紹原始的代碼邏輯如何轉化為引擎規則的過程。

一、背景

? ? 明源云ERP建模平臺提供了強大的規則引擎機制,開發或者實施人員只需要通過簡單的界面配置就可以完成必填、顯隱、顏色等界面交互控制,從需要代碼開發轉為界面配置,極大提高了業務的交付效率。

? ? 在行業中也存在類似規則配置解決方案,但是大部分支持簡單的基于代碼轉換可視化配置,界面也十分復雜,并且缺少如業務參數、關鍵字等業務應用場景。所以我們如何深入的結合業務特性并且將界面的學習和使用成本降低到最小,就是我們面臨的挑戰。

? ? 本文從實際案例的角度出發,介紹原始的代碼邏輯如何轉化為引擎規則的過程。

二、規則引擎整體架構

  • 設計時(Design-Time):用于規則的可視化配置,配置內容將會存儲到配置文件中;

    • 條件配置:規則對應的業務判斷邏輯,如“表編輯模式”;

    • 行為配置:將條件綁定到控件對應的組件屬性或行為上,如保存按鈕在”表單編輯模式“時顯示;

  • 元數據(Metadata)

    • 元數據作為設計時和運行時的橋梁,用于存儲設計時布局、字段配置、條件配置信息,通過元數據配置文件進行存儲,在運行時解析元數據文件輸出布局及規則配置;

  • 運行時(Runtime):解析規則配置,將規則和用戶行為綁定, 轉化為對應代碼可執行邏輯;

    • 解析引擎:將設計時中的規則條件、行為配置等解析為可執行函數,保障執行性能;

    • 事件映射:將組件事件、用戶操作等交互行為和規則執行函數綁定,觸發事件時執行對應規則邏輯;

    • 執行器:在組件觸發事件時構造數據上下文,將上下文對象傳遞到解析引擎生成的可執行函數中,根據函數執行結果分發到對應組件行為;

三、通過代碼實現規則業務

? ? 案例:折扣管理中折扣方案應用樓棟或者整棟樓或者單棟樓,涉及到隱藏規則及必填校驗規則

“應用范圍”為“整個項目”:

“應用范圍”為“指定樓棟”:

通過腳本代碼如何實現

? ? 首先我們嘗試將需求轉為代碼實現設計:

  • 當”應用范圍“為”整個項目“時,樓棟名稱隱藏,并且取消必填;

  • 當”應用范圍“為”指定樓棟”時,樓棟名稱顯示,樓棟名稱為必填。

? ? 假設我們通過代碼來實現上述場景的邏輯,首先我們會訂閱“應用范圍“的值更改事件,在事件中判斷應用范圍為”指定樓棟“時設置樓棟名稱顯示及必填。

// 訂閱應用范圍值更改事件 usedScope_valuechanged:function(e){// 獲取樓棟名稱控件var bldList = appform.get('BldList');switch(e.value){case 'all': // 應用范圍:整個項目bldList.hide();bldList.setRequired(false);break;case 'one': // 應用范圍:指定樓棟// 顯示樓棟列表bldList.show();// 樓棟列表設置為必填bldList.setRequired(true);break;} }


四、規則設計時配置

? ? 基于代碼實現我們可以將邏輯抽象為兩個部分:

  • 條件:當”應用范圍“等于”指定樓棟“

  • 行為:”樓棟名稱“設置”必填、顯示“都屬于對應執行的行為

? ? 如果我們需要將條件再做一次抽象,作為可視化界面可配置的,首先我們將條件翻譯為代碼:

// 當”應用范圍“為”指定樓棟“ if(data.usedScop == 'one'){// todo }

? ? 我們可以從代碼中得出條件包含以下幾點:

  • 條件數據來源類型 :條件匹配會有不同的數據來源,一般是當前表單的數據中某個字段,也有場景是通過URL參數或者業務參數作為判斷條件;

  • 條件數據來源值:這里的值是字段名稱 ”userScope“;

  • 操作符:用于比較的方式,這里是”=“等于符號,其他操作符還有大于、小于、為空判斷等等;

  • 匹配值類型:匹配值常見為固定值或者URL參數值等;

  • 匹配值:匹配值類型對應的值,如果是固定值這里是對應的固定值文本。

? ? 我們這里的示例中只有一個條件,實際過程中條件一般會有多個并且還有不同邏輯的組合,所以我們需要考慮多個條件組合及復雜的判斷邏輯。

規則行為配置

? ? 條件配置完成后,條件需要和對應控件行為做關聯,如“隱藏、必填”等,具體配置邏輯如下:

? ? “樓棟名稱”控件顯隱規則:如果“應用范圍為指定樓棟”則“顯示”:

  • 綁定控件:樓棟名稱;

  • 綁定行為:顯隱行為;

  • 對應條件:應用范圍為指定樓棟;

  • 行為:顯示。

五、規則運行時解析機制

? ? 剛才提到的條件及行為都屬于設計時的配置或描述,那么在界面運行時如何應用這些配置呢,需要對配置進行解析綁定到對應控件上。

1、將規則配置解析為對應表達式:

//?通過new?Function?將規則生成為可執行函數 function rule(e){return e.data.useScope == 'one'; }

2、將規則行為綁定到控件上:

// 訂閱應用范圍值更改事件 var control = appform.get('usedScope'); control.on('valuechanged', invokeRule);

3、控件觸發值改變時執行規則:

//執行規則 function invokeRule(e){var result = rule(e);//執行行為invokeAction(e, result); }

4、執行組件行為:

function invokeAction(e){var action = e.action;switch(action){case 'show':if(result){e.control.show();}else{e.control.hide();}break;} }


六、小結

? ? 通過這個模型我們在必填、顏色、加粗、編輯模式、顯隱等場景都實現了通過可視化配置,已經滿足了80%的交互場景配置。后續面向更加復雜通過在線編碼支撐,在規則條件上增加代碼段在線編碼,如API數據源、算法邏輯等,這樣就可以通過規則引擎配置全面托管系統的交互邏輯配置,實現交互簡單場景可視化配置、復雜場景低代碼開發。

------ END ------

作者簡介

文同學:?產品經理,目前負責建模平臺的規劃工作。

也許您還想看

【復雜系統遷移 NET Core平臺系列】之界面層

.NET Core MVC擴展實踐

如何解決大批量數據保存的性能問題

招商城科走進武漢研發中心,現場編碼解鎖平臺內核技術

總結

以上是生活随笔為你收集整理的从案例角度解析建模平台动态规则引擎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。