纸壳CMS3.0中的规则引擎,表达式计算
纸壳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
纸壳CMS3.0中的规则引擎,表达式计算的更多相关文章
- 使用规则引擎Drools计算圆周率PI
实际上是使用规则引擎能够更新工作内存区重新匹配规则实现迭代功能. 使用了策略模式实现. <规则引擎与RETE算法介绍> PPT : http://files.cnblogs.com/lov ...
- 纸壳CMS 3.0升级.Net Core 2.1性能大提升
微软发布了.Net Core 2.1正式版,纸壳CMS也在第一时间做了升级,并做了一系列的优化和调整,性能大幅提升,并解决了一些历史遗留问题,添加了一些新功能. Github https://gith ...
- 在Docker中运行纸壳CMS并配置使用MySql
纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/ ...
- Scala化规则引擎
1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...
- .Net Core 环境下构建强大且易用的规则引擎
本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满 ...
- [z]规则引擎
https://www.ibm.com/developerworks/cn/java/j-drools/ 使用声明性编程方法编写程序的业务逻辑 使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性, ...
- 规则引擎.Net Core
.Net Core 环境下构建强大且易用的规则引擎 https://www.cnblogs.com/chenug/p/9160397.html 本文源码: https://github.com/jon ...
- 第四章 在MVC4.0中对脚本以及样式表的引用变化
原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...
- WebSphere ILOG JRules 规则引擎运行模式简介
WebSphere ILOG JRules 规则引擎运行模式简介 引言 作为 JRules 的核心组件,规则引擎决定了在规则集的执行过程中,哪些业务规则会被执行,以及以何种顺序执行.理解并合理选择规则 ...
随机推荐
- 用WINSOCK API实现同步非阻塞方式的网络通讯
Option Base 0Option Explicit '* ************************************************** *'* 模块名称:Winsock ...
- tr th td
<table> <caption></caption> <thead> <tr> & ...
- unix时间戳与时间
[root@pserver ~]# date -d "@1381371010" Thu Oct :: CST [root@pserver ~]# date --date=" ...
- Java 设计模式系列(七)桥接模式
Java 设计模式系列(七)桥接模式 桥接模式(Bridge)是一种结构型设计模式.Bridge 模式基于类的最小设计原则,通过使用封装.聚合及继承等行为让不同的类承担不同的职责.它的主要特点是把抽象 ...
- Android应用开发环境的搭建和使用
主要包括Android SDK.Android开发工具:也包括如何使用Android提供的ADB.DDMS.AAPT.DX等工具,掌握这些工具是开发Android应用的基础技能. 1.Android的 ...
- viewDidAppear在何时调用?
[viewDidAppear在何时调用] If the view belonging to a view controller is added to a view hierarchy directl ...
- alter table导致的mysql事务回滚失败
今天做数据迁移, 发现事务有时候可以回滚, 有时候不可以回滚, 最后一点点调试发现中间有段修改表结构的语句, 最终导致回滚失败. 1.MySQL最常用的两个表类型: InnoDB和MyISAM.MyI ...
- Windows 环境下分布式跨域Session共享(转)
出处:http://www.cnblogs.com/stangray/p/3328092.html 为什么还是那句话,在网上找了N篇Session共享,但真正可以直接解决问题的还是没有找到. 一.以下 ...
- cxf的一些使用说明
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agree ...
- HDU 6118 度度熊的交易计划 (最小费用流)
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...