纸壳CMS3.0中的规则引擎,表达式计算
2018-06-17 22:43:55来源:未知 阅读 ()
纸壳CMS3.0中的规则引擎,用于计算通用表达试结果。通常业务逻辑总是复杂多变的,使用这个规则引擎可以灵活的修改计算表达式。
IRuleManager
IRuleManager
,是使用规则引擎的主要接口:
namespace Easy.RuleEngine { public interface IRuleManager { bool IsTrue(string expression); bool IsTrue(string expression, object workContext); object Value(string expression); object Value(string expression, object workContext); } }
主要有两个方法,IsTrue
和Value
- IsTrue:用于判断表达式的结果是否为真
- Value:用于获取表达的计算结果
IRuleProvider
IRuleProvider,是规则提供程序,该接口只有一个方法,用于处理对应的规则和返回结果:
namespace Easy.RuleEngine { public interface IRuleProvider { void Process(RuleContext ruleContext, object workContext); } }
IRuleProvider,是规则引擎的主要扩展方式,实现该接口,即可现实一个特定的规则处理。
已有的规则处理程序
- CommonMethodsRuleProvider
- ValueOfRuleProvider
- DateRuleProvider
- MoneyRuleProvider
CommonMethodsRuleProvider
提供了以下可用的方法:
- Equals:
ruleManger.IsTrue("Equals(1,1)")
- NotEquals:
ruleManger.IsTrue("NotEquals('1',1)")
- StartsWith:
ruleManger.IsTrue("StartsWith('123','1')")
- EndsWith:
ruleManger.IsTrue("EndsWith('123','3')")
- Contains:
ruleManger.IsTrue("Contains('123','2')")
- NotStartsWith:
ruleManger.IsTrue("NotStartsWith('123','2')")
- NotEndsWith:
ruleManger.IsTrue("NotEndsWith('123','2')")
- NotContains:
ruleManger.IsTrue("NotContains('123','4')")
- IsBlank:
ruleManger.IsTrue("IsBlank('')")
- IsNotBlank:
ruleManger.IsTrue("IsNotBlank('3')")
- In:
ruleManger.IsTrue("In('1',['1','2','3'])")
- NotIn:
ruleManger.IsTrue("NotIn('1',['1','2','3'])")
- GreaterThan:
ruleManger.IsTrue("GreaterThan(2,1)")
- GreaterThanOrEquals:
ruleManger.IsTrue("GreaterThanOrEquals(1,1)")
- LessThan:
ruleManger.IsTrue("LessThan(1,1)")
- LessThanOrEquals:
ruleManger.IsTrue("LessThanOrEquals(1,1)")
ValueOfRuleProvider
用于获取“WorkContext”中的值:
- ValueOf:
ruleManger.Value("ValueOf('Name')", new { Name = "A" })
- ValueOf数组:
ruleManger.IsTrue("ValueOf('Name',2)='B'",new{Name=new string[]{"A","B"}})
DateRuleProvider
用于将字符串转为日期类型:
- Date:
ruleManger.Value("Date('2018-05-15')")
MoneyRuleProvider
用于将字符串转为货币类型:
- Money:
ruleManger.IsTrue("Money('3.1')>1.0")
WorkContext
IsTrue
和Value
两个方法都有同样一个重载,即可传入一个“WorkContext”。这个WorkContext可以理解为表达式的应用上下文,即表达式的工作“环境”,表达式可以在该“WorkContext”中取对应的值进行计算。
运算符
该规则引擎支持以下简单运算符:
- +:
ruleManger.Value("1+2")
- -:
ruleManger.Value("1-2")
- *:
ruleManger.Value("2*2")
- /:
ruleManger.Value("2/2")
- and,&&:
ruleManger.IsTrue("3.1>1.0 and 2>1")
或者ruleManger.IsTrue("3.1>1.0 && 2>1")
- or,||:
ruleManger.IsTrue("3.1>1.0 or 2<1")
或者ruleManger.IsTrue("3.1>1.0 || 2<1")
- ():
ruleManger.Value("3*(1+2)")
数据类型
规则引擎中可直接使用以下数据类型:
- 字符串:用单引号或者双引号表示一个字符串
- 数字:直接使用数字,或带有小数点的数字
简单示例
例如当前计算利润的公式为:(总价-物流费)*12%,已经定义好的workContext: {Total,ShipAmt}:
- ruleManger.Value("(ValueOf('Total')-ValueOf('ShipAmt'))*0.12",new {Total=500,ShipAmt=12})
当公式有变更,直接修改表达式就可以了。
在CMS中的应用
纸壳CMS3.0中的全局内容就应用了该表达式引擎,满足规则的内容就会加入到页面中:
原文地址:http://www.zkea.net/zkeacms/document/rule
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 团队开发中的 Git 实践 2019-09-30
- PHP中的这些坑,你没踩过算你厉害 2019-09-23
- 用redis实现电商项目中的秒杀商品功能 2019-08-26
- Redis在Laravel项目中的应用实例详解 2019-08-23
- mysql读写分离在项目实践中的应用,干货 2019-08-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash