因爲工做須要,我參考了許多優秀JAVA實現的開源規則引擎框架,例如Drools等,可是在茫茫人海中我發現了一個可視化配置基於RETE算法的規則引擎,它的名字叫Urule,下面摘選自Urule官方Wiki:java
URule是一款基於RETE算法純Java的規則引擎產品。在URule當中提供了嚮導式規則集、腳本式規則集、決策表、
交叉決策表(PRO版)、決策樹、評分卡及決策流共七種類型的規則定義方式,配合基於WEB的設計器,可快速實現
規則的定義、維護與發佈。
複製代碼
有一天,小葉同窗在擼着代碼,產品MM找到小葉同窗,評審一個每日登錄活動的需求,需求大概是這樣的:程序員
-5級如下用戶登錄送5元紅包
-5級以上用戶登錄送10元紅包
複製代碼
小葉同窗一看,So easy!兩行代碼敲下去就提測上線了:github
//登錄事件觸發代碼
if (user.getLevel() <= 5) {
//發放5元紅包
rewardGenerator.send("5元紅包");
} else {
//發放10元紅包
rewardGenerator.send("10元紅包");
}
複製代碼
過了一天,運營GG找產品MM反饋說活動太火爆,被褥羊毛太嚴重了,要修改一下規則:算法
-用戶必須實名認證
-5級如下用戶登錄送3元紅包
-5級以上用戶登錄送7元紅包
複製代碼
小葉同窗沉着臉改完邏輯:框架
//沒有實名認證不給獎勵!!!
if (!user.isRealNameAuth()) {
return;
}
if (user.getLevel() <= 5) {
//發放3元紅包
rewardGenerator.send("3元紅包");
} else {
//發放7元紅包
rewardGenerator.send("7元紅包");
}
複製代碼
再過了一週,運營GG找到產品MM說玩法太單一,沒有達到活動效果,要增長活動的可玩性,需求又改爲了這樣:spa
-用戶必須實名認證
-5級如下用戶
-登錄送3元紅包;
-每日分享文章到朋友圈送1次抽獎機會;
-論壇回帖15字以上超過10次贈送50元滿減券;
-5級以上用戶
-登陸送7元紅包;
-每日分享文章到朋友圈送2次抽獎機會;
-論壇簽到送1次抽獎機會;
-論壇回帖1字以上贈送100元滿減券;
複製代碼
剛拿到PRD的小葉同窗的表情是這樣的(當時心想的應該是那麼多if else怎麼嵌套):設計
因而小葉同窗開始百度有沒有運營GG能可以本身配置生成相關規則的一些框架什麼的,還真的有!它大概長這樣:code
也能夠長這樣:cdn
甚至能夠這樣玩(用來算分數簡直不要太爽):
上面三種形態只是Urule的冰山一角,重要的是可視化配置有木有!比寫死代碼舒服多了!解放程序員雙手的利器(固然仍是得看場合和需求滴)
因而小葉同窗二話不說把Urule整合進了本身的項目中,按照需求配置了一個一條規則樹:
Urule感染到小葉同窗的是,裏面的動做所有能夠自定義,好比上圖,業務場景是用戶登陸、分享等事件MQ觸發規則校驗,可是有一部分數據可能不從MQ傳遞過來,那麼想要拿到用戶的一些特殊數據,我們能夠調HTTP接口啊!!好比它自帶的一些動做,花樣百出,大部分知足你想要乾的事。事成以後,小葉同窗趕忙把Urule擼上線,那麼之後的規則就由運營GG本身配置就好啦