如何使用 Java lambda 语法和外部规则引擎开发定制应用程序( 二 )


这种方法适用于那些无法负担专用的规则引擎开销及其基础设施、维护、经常性成本等等成本的团队 , 并且团队中的领域专家具有软件基础 , 或者团队成员身兼数职 。
这种极简主义的方法适合创业的人 。 深究大公司的起源 , 我们不难发现 , 许多大公司一开始也是小团队 , 预算都必须花在刀刃上 , 拥有优秀的人才和创新的想法 。 所以 , 综合考虑来看 , 虽然团队的规模可能无法完全确定 , 但10人及10人以下的团队在面临同样的限制条件时是可以充分利用这种方法的 。
更大规模的团队也能从这种方法中受益 。 此外 , 砍掉一些专用的规则引擎也能受益 , 除非所有酷炫的核心功能(商用规则引擎主打功能)都是必需的 。
结果概述&新颖性
下图列出的步骤描述了这些组件 , 也展示了该机制下更高层次的功能概览 。
如何使用 Java lambda 语法和外部规则引擎开发定制应用程序
文章图片
配置存储了规则 , 这些规则只是简单的java方法或布尔表达式 。 为了避免Java语法的冗长 , 我们也采用了Lamda和方法引用 , 从而在Java方法的语法之上提供了一个额外的抽象层 。
配置存储了由领域专家编写的规则 。 以下这些都是有效的语句 , 用类似lambda体的语法编写 , 以捕获专家的意图 。 例如 , 要将娱乐软件评级委员会(ESRB)定级的成人视频游戏划分到合适年龄范围的产品 , 领域专家可以这样写:
配置可以是一个文件、原始字节流或URL , 可以放置在任何地方 。 放置位置选择广泛 , 如下均可选择:
一个本地磁盘上的文件 。
一个数据库(包括SQL和NoSQL) 。
一个远程网络位置(如HTTPURL、原始TCP套接字等) 。
放置到云上的一个位置(如亚马逊云科技的S3bucket或谷歌的云硬盘等)
框架提供了对源编码、安全性和传输的全面抽象 。 任何标准或专有的编解码器(CODEC)都可以用于存储和检索规则 , 这同样适用于两种主要的安全范式-机密性和完整性 。 就这一点而言 , 每个人都可以编写自己的适配器(Adapter) 。 只有这样 , 它的检索过程的最后一步应该产生Java表达式或谓语中的规则 。
通过另外做一些工作 , 增加一种机制 , 这种机制可以使流规则适合采用任何标准协议的浏览器(如WebSocket、HTTP/2、XMPP、MQTT) 。 这种方法甚至可以与Web-assembly结合在一起 , 在Web浏览器中集成安全和复杂的规则 。
入门指南
如何使用 Java lambda 语法和外部规则引擎开发定制应用程序】虽然传统来说 , 在开始使用SDK之前我们最好先了解一下它的结构 , 但为了方便和简单 , 我们颠倒了顺序 。 在本节中 , 我们将通过简单的问题陈述或用例来说明规则是如何被外部化的 。
先决条件
用户必须具有使用JavaSE1.8或其更高版本进行软件开发的经验 。 除此之外 , 还需要一台带有JavaSE1.8(带有IDE)的标准机器 。 在整篇文章中的所有示例中 , IDE将选用Eclipse , 而构建工具选用MAVEN 。
步骤一
从(https://github.com/trainerpb/easyrule/blob/master/externalize-rules.jar)下载Library并将其保存在本地路径上 , 例如D:externalize-rules.jar 。 这里是完整的源代码(https://github.com/trainerpb/easyrule) 。
步骤二
创建一个Maven项目 , 将编译器源代码层级设置为带有依赖项的1.8 , 如图所示 。
如何使用 Java lambda 语法和外部规则引擎开发定制应用程序
文章图片
问题陈述:一个高档的服装零售店是经常在不同的场合为顾客提供折扣 , 基于一系列不同的可参考标准 , 比如职业、收入水平、工作/居住场所、教育水平等等 。 为了不复杂 , 我们假设一个简单的客户模型类如下: