五月丁香-成人精品一区二区-成人免费毛片入口-韩国精品一区二区-爱的色放韩国电影-欧美人与禽猛交乱配视频-欧美日韩亚洲国产-日本色影院-欧美h在线观看-99免费精品视频-最新中文字幕第一页-无码人妻精品一区二区三区9厂-亚洲另类xxxx-一个色av-日韩不卡在线播放-91热爆视频-国产人妻精品一区二区三区不卡-2019国产在线-成年人福利网站-国产嫩草av

行業動態

.Net Core 環境下構建強大且易用的規則引擎

2018-06-11 08:43:00 小沐管家 0

1. 引言

1.1 為什么需要規則引擎

在業務的早期時代,也許使用硬編碼或者邏輯判斷就可以滿足要求。但隨著業務的發展,越來越多的問題會暴露出來:

  • 邏輯復雜度帶來的編碼挑戰,需求變更時改變邏輯可能會引起災難

  • 重復性的需求必須可重用,否則必須重復性編碼

  • 運行期間無法即時修改規則,但重新部署可能會帶來其他問題

  • 上線前的測試變得繁瑣且不可控,必須花大量的人力和時間去測試

這些困境在『 小明歷險記:規則引擎 drools 教程一』 一文中可以體會一番,一開始只是簡單的根據購物金額來發放積分,運行期間又要更改為更多的規則層次,如果不及時引入對應的規范化處理機制,開發人員將慢慢墜入無止盡的業務深淵。對此,聰明的做法是在系統中引入規則引擎,對業務操作員要提供盡量簡單的操作頁面來配置規則,規則引擎和配置盡量不要耦合到一塊。

1.2 .Net Core 環境下的選擇 -- Nrules

目前最流行的規則引擎應該是Drools, 用 Java 語言編寫的開放源碼規則引擎,使用 Rete 算法對所編寫的規則求值,其操作流程如下:

沐歌環保

對于 .Net 應用來說,可以通過 Kie 組件提供的 Rest 接口調用規則引擎運算。然而其過于龐大,僅僅只是需要規則引擎計算核心的部分。對此,查找了 .Net 中開源的規則引擎,發現只有同樣實現 Rete 算法的 Nrules 滿足要求(支持 .Net Core,運行時加載規則引擎)。

注:本文參考借鑒了美團技術團隊 從 0 到 1:構建強大且易用的規則引擎 一文的設計思路,對 Drools 從入門到放棄。

2. Nrules 實戰 -- 電商促銷活動規則引擎設計

2.1 了解 Nrules

NRules 是基于 Rete 匹配算法的.NET 生產規則引擎,基于.NET Standard ,支持 4.5+ 的應用,提供 流式聲明規則、運行時構建規則、專門的規則語言(開發中,不推薦使用到生產,基于.Net 4.5 而不是 .NETStandard )。
其計算機制也與其他規則引擎大同小異:
沐歌環保

2.2 設計規則配置

前文提到 對業務操作員要提供盡量簡單的操作頁面來配置規則 ,所以我們定義促銷活動的規則配置就要盡量簡單。

沐歌環保

在設計模型時,我們必須先參考現實生活中遇到的電商促銷活動,大致可以想到有這么幾種活動類型:滿減促銷、單品促銷、套裝促銷、贈品促銷、滿贈促銷、多買優惠促銷、定金促銷等。
在這里,我選擇對多買優惠促銷做分析,多買促銷優惠即所謂的階梯打折,如買一件9折,買兩件8折,其模型大致如下:

沐歌環保

這里為了簡化設計,設計的模型并不會去約束平臺、活動范圍、會員等級等,僅僅約束了使用的產品 id 范圍。為了匹配現實中可能出現的組合優惠(類似滿減活動后還可以使用優惠券等)現象和相反的獨斥現象(如該商品參與xx活動后不支持X券),設置了一個字段來判斷是否可以組合優惠,也可以理解為所有活動都為組合優惠,只是有些組合優惠只有一個促銷活動。

注:想了解更多關于電商促銷系統設計可參考腦圖

2.3 規則配置轉換

為了實現 規則引擎和配置盡量不要耦合到一塊,必須有中間層對規則配置進行轉換為 Nrules 能夠接受的規則描述。聯系前文的計算機制,我們可以得到這樣一個描述模型:

沐歌環保

由于 Nrules 支持流式聲明,所以約束條件和產生的結果都可以用 LambdaExpression 表達式實現。現在我們需要把階梯打折的配置轉換成規則描述,那我們需要先分析一下。假設滿一件9折,滿兩件8折,滿三件7折,那我們可以將其分解為:

  • 大于等于三件打 7 折

  • 大于等于兩件且小于三件打 8 折

  • 大于等于一件且小于兩件 9 折

基于此分析,我們可以看出,只有第一個最多的數量規則是不一樣的,其他規則都是比前一個規則的數量小且大于等于當前規則的數量,那么我們可以這樣轉換我們的規則配置:

沐歌環保

2.4 生成規則集合

在 Nrules 的 wiki 中,為了實現運行時加載規則引擎,我們需要引入實現 IRuleRepository ,所以我們需要將描述模型轉換成 Nrules 中的 RuleSet:

沐歌環保

2.5 執行規則引擎

做了轉換處理僅僅是第一步,我們還必須創建一個規則引擎的處理會話,并把相關的事實對象(fact)傳遞到會話,執行觸發的代碼,相關對象發生了變化,其簡單代碼如下:

沐歌環保

2.6 應用場景示例

我們假設有這么一個應用入口:傳入一個購物車(這里等價于訂單)id,獲取其可以參加的促銷活動,返回對應活動優惠后的結果,并按總價的最低依次升序,那么可以這么寫:

沐歌環保

假設這么一個購物車id,買一件時最優惠是參加 A 活動,買兩件時最優惠是參加 B 和 C 活動,那么其效果圖可能如下:

沐歌環保

3. 結語

本文只是對規則引擎及 Nrules 的簡單介紹及應用,過程中隱藏了很多細節。在體會到規則引擎的強大的同時,還必須指出其局限性,規則引擎同樣不是銀彈,必須結合實際出發。

擴展閱讀:Martin Fowler:應該使用規則引擎嗎?

原文地址: https://www.cnblogs.com/chenug/p/9160397.html


? 主站蜘蛛池模板: 亚洲自拍色 | 狼人色综合| 亚洲天堂免费观看 | 麻豆高清| 竹菊影视日韩一区二区 | 亚洲色域网| 亚洲av无码国产精品麻豆天美 | 91人妻一区二区三区 | 深爱激情综合网 | 上海女子图鉴 | 波多野42部无码喷潮 | 亚洲av毛片一区二二区三三区 | 国产精品无码久久久久久电影 | 大乳村妇的性需求 | 亚洲乱码精品久久久久.. | 污视频在线观看免费 | 久久人人干 | 国产成人无遮挡在线视频 | 美女网站在线 | 日本三级久久久 | 在线www| 黄色一区二区三区四区 | 免费在线看黄色片 | 免费看黄在线看 | 亚洲第一视频 | 青青在线观看视频 | 337p粉嫩日本欧洲亚洲大胆 | 午夜福利电影一区二区 | 女女高潮h冰块play失禁百合 | 黄色的网站在线观看 | 狠狠看| 色哟哟无码精品一区二区三区 | 国内精品小视频 | 亚洲v在线| 亚洲综合99 | 国产96在线 | 久久久www成人免费精品 | 色哟哟在线播放 | 四虎一国产精品一区二区影院 | 在线免费视频一区二区 | 天天看天天做 | 狠狠爱天天干 | 超碰在线超碰 | 男人的天堂一区二区 | 日韩av电影网站 | 麻豆传媒在线观看 | 九一福利视频 | 亚洲一区二区黄片 | 边打电话边做 | 91色爱 | 欧美熟妇交换久久久久久分类 | 成人性生活免费看 | 免费啪啪网 | 久久66热这里只有精品 | 午夜国产在线 | 日本不卡一二 | 大奶骚 | 囯产精品久久久久久 | 在线观看av的网址 | 夜色视频网 | av爽妇网 | 日韩av在线不卡 | 激情五月婷婷网 | 91激情视频在线观看 | 国产精品vip | 日批视频免费在线观看 | 亚洲第二色 | 亚洲精品网站在线 | 欧美视频在线播放 | 亚洲色图久久 | 神马一区二区三区 | 日本a级黄色 | 国产高清免费视频 | 天天爱综合 | 亚洲色图另类小说 | 亚洲人在线播放 | 亚洲AV无码阿娇国产精品 | 91午夜交换视频 | 大胸美女被爆操 | 日本韩国欧美中文字幕 | 亚洲网站在线观看 | 嫩草影院菊竹影院 | 日本在线免费播放 | 红猫大本营在线观看的 | 涩涩在线看| 日本人体一区 | 欧美黑人性受xxxx精品 | 女人的天堂av在线 | 爱草在线视频 | 亚洲在线看 | 老女人做爰全过程免费的视频 | 老牛嫩草二区三区观影体验 | 原来神马电影免费高清完整版动漫 | 韩国av不卡| 亚洲国产成人自拍 | 国产女人在线视频 | 国内精品久久久 | 美女屁股眼视频免费 | 欧美剧场 |