文档章节

规则引擎系列:规则引擎发展 读后感

jim19770812
 jim19770812
发布于 2014/08/24 12:25
字数 1276
阅读 433
收藏 4

读过了moon66sun在csdn上的文章《规则引擎系列:规则引擎发展(如何在工作流等开发平台中集成规则引擎) 》,原文如下

基于web应用来说,通常分为三部分:界面层、业务逻辑层和持久层。

所有的开发平台一般都是在这三方面做工作。由于这三层的特点有些不同,因此我们会采用不同的实现方式来实现。
界面层:强调的是操作界面,注重采用所见即所得的方式来调整界面布局以及界面样式。更多的我们可以会做一个表单设计器。
业务逻辑层:强调逻辑调整的便利性,一般采用动态语言或者规则引擎来实现逻辑的配置。
持久层:采用领域模型,根据定义MetaData来定义结构,从而实现和持久层的访问。当然持久层不全代表是数据库。

国内出现的开发平台中,看到基本都是用代码来实现业务逻辑层的。不过是动态语言还是连接外部程序。比如工作流中一些前续事件和后续事件等。很少看到采用规则引擎来实现业务逻辑的配置。
究其原因就是基于推理方式的规则引擎并不适合普通业务逻辑的编写。
          制作一个不采用推理方式的规则引擎,而采用我们传统的编码逻辑方式的规则引擎。我们可以称之为简单规则引擎。没有了冲突推理后的规则系统,将更加简单的来实现业务逻辑。因此其不用再考虑规则优先级,冲突、关联之类的事情,无需再担心某处的一个简单的改变带来了大量无发确定的后果。实现了易用以及灵活性的完美结合。
由于目前并没有成熟的开源项目来满足这类需求,因此我们需要自己来实现这类引擎。
如何来实现呢,我们可以从当前已经实现的基于语言的配置入手。
首先实现编写脚本来实现业务逻辑,其次规则的配置界面,可以自动生成这类脚本。
第一步,建立一个业务语言和脚本语言的映射,如果我们是基于java的项目,就可以直接采用java语言作为脚本语言,然后利用java的动态加载机制,实现规则实时应用。
第一个java中的对象和业务语言的对应,这在目前各类商业的规则引擎已经做的很好,可以参考。实现BOM和XOM的对应关系。
第二步,做一个配置界面,可以来定义调用这些java的对象,由于已经建立了java对象和业务语言的对应关系。因此配置后的逻辑界面其描述就是以业务语言来描述。
第三步,将配置的逻辑,存储到我们的业务系统中,供工作流的某个节点调用。工作流的节点中只要指定了规则名称以及需要传递的对象,就可以将数据传递到规则中进行处理。
如果能够将当前工作流的脚本编辑界面直接替换成规则的开发界面,当然更加好一些。

前面写的真好,分析的透彻入木三分,但个人认为业务语言的引入会增加理解的复杂性和学习成本,其实这些业务语言就是一种语义严谨的另一种编程语言,相当于为了解决java代码难学的问题,又引入了另一种晦涩的语言来作为java语言的中间语言,且不说这个翻译过程有无必要,就说这中间语言就够晦涩了。

这个做法有些背离了规则引擎的初衷,虽然可以做到项目中变化的部分和不可变部分的分离,但无法做到让不懂编程的业务专家来自己修改业务逻辑,以适应业务需求快速变化的目的。个人认为与其这样,不如让客户直接使用存储过程来的简单直接。起码客户只要懂sql就可以解决业务问题了,不必另学一种或两种编程语言。

个人认为以后规则引擎的趋势是用一种具有某种规则和语法的类似自然语言的描述和文字来解决复杂业务问题,比如“我希望金额大于二千的报销需要总经理审批,并且财务要签字”,当然了这并不容易,还有很长的路要走,但这是趋势,机器也在越来越聪明不是吗。

© 著作权归作者所有

jim19770812
粉丝 21
博文 46
码字总数 27704
作品 0
济南
私信 提问
Java规则引擎与其API(JSR-94)

复杂企业级项目的开发以及其中随外部条件 不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地...

银月光海
2016/02/18
212
0
.Net Core 环境下构建强大且易用的规则引擎

1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满足要求。但随着业务的发展,越来越多的问题会暴露出来: 逻辑复杂度带来的编码挑战,需求变更时改变逻...

dotNET跨平台
2018/06/11
0
0
MySQL 系列教程(一) 生产标准线上环境安装配置案例

一、简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点: MySQL是一种数据库管理系统。 MySQL是一种关联数据库管理系统。 MySQL软件是一种...

MK先生
2018/06/26
0
0
规则引擎-BRMS在企业开发中的应用

1. 什么是规则 复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库...

lifetragedy
2016/10/17
0
0
360数据处理平台的架构演进及优化实践

本次要分享的是360大数据中心数据处理平台Titan的架构演进,以及一些具体的实践过程。 一、背景介绍 在当今的大数据时代,大数据计算引擎已经从原先最早的Hadoop生态系统演变到了第三代甚至是...

技术小能手
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Handler消息传递机制分析

Handler的用途和用法 写过Android程序的人大概都会遇到ANR(Application Not Responding)。如果程序在一段时间内没有响应,系统就会弹出一个对话框,让用户选择继续等待还是强制关闭应用。为...

tommwq
今天
5
0
JS前端MD5加密

Bootstrap官网获得md5 js地址:https://www.bootcdn.cn/blueimp-md5/ <!--MD5加密--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script> 使用方法: md5(pwd)......

被毒打的程序猿_先瑞
今天
6
0
BigDecimal 去后面无用的0的方法

BigDecimal a=new BigDecimal("0.1000"); System.out.println(a.stripTrailingZeros().toPlainString());...

xiaodong16
今天
7
0
JAVA--高级基础开发

[集合版双色球] 十二、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码...

李文杰-yaya
昨天
26
0
聊聊rocketmq broker的CONSUMER_SEND_MSG_BACK

序 本文主要研究一下rocketmq broker的CONSUMER_SEND_MSG_BACK CONSUMER_SEND_MSG_BACK rocketmq/common/src/main/java/org/apache/rocketmq/common/protocol/RequestCode.java public class......

go4it
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部