`
hxpwork
  • 浏览: 109556 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

为何对于规则来说Java编码是不好的,而声明式编程是更好的选择

阅读更多
 

为何对于规则来说Java编码是不好的,而声明式编程是更好的选择 <o:p></o:p>

作者: Mark Proctor <o:p></o:p>

Drools的卖点之一,也是我们能够超越其它竞争者的地方是,在规则的表达式和推论中允许使用Java编码。这带来了一个较低的学习曲线,因为Java开发者不需要额外的培训就可以开始编写规则的推论部分;不管是更新值,发送消息或从数据库返回信息。这种与Java或类Java语言一体的模式,对于市场来说也是一种对比竞争者的宣传措施。从表面上看来起来是很好的,并且对于管理者来说也可以带来——更少的培训,利用现有的技术,哪不好的一面是什么呢?<o:p></o:p>

使用Java语言,将编程环境从一个产生式规则系统(如Drools)中转移出来。当你允许在规则中使用Java编码时,你也就开始使用命令式的编程。规则引擎提供了一个图灵完整的系统以及一种声明式的语言,如果你阅读了Drools用户手册回留意到我们花了一些时间解释命题和一阶逻辑,以及它们怎样可以用一种声明式的风格来描述各种情况——这对于软件开发者来说是一种不可思议的方法。概要来说Java是命令式的,因为你描述如何去做事情,这通常占据了多行的代码并且意味着你必须读完所有这些代码才能理解它要做什么。当代码变得越复杂,也就意味着你要阅读更多的代码行,最终从这一点来说,当复杂性越来越大时,代码将变得难以理解和维护;这就会造成只有最初的开发者才能有效率的维护代码。声明式编程允许你用关键字来表达复杂的规则;每一个规则特定于一个特殊场景以及相关行为之间的细节。这些行为也应该使用声明的模式来指定,否则会降低我们定义和编制规则条件的价值。这正是业务规则方法学的灵魂所在。对于这点感兴趣的朋友我推荐下面三本书:
Business Rules and Information Systems: Aligning IT with Business Goals
Tony Morgan
ISBN: 0201743914

Principles of the Business Rule Approach
Ronald G. Ross
ISBN: 0201788934

Business Rules Applied
Von Halle
ISBN: 0471412937

因此当我们开始将复杂的If嵌套架构和循环架构放入推论时,我们就开始增加维护的复杂性;取而代之的是推论应该专注于函数或者对象方法的调用。每一个函数或方法有着清晰和文档化的角色,它指定了需要的参数,它对这些参数的处理以及返回的值——它们也可以用DSL来表示的更清晰。<o:p></o:p>

当前Drools并没有计划移除对Java的支持,并且我们不久将希望增加GroovyJavaScript的支持——我们也希望推荐一种支持声明式方法的语言,而不是从Drools中移除什么。这种新的语言将变成我们推荐编制规则的标准语言。<o:p></o:p>


那么这样的语言应该包括什么呢?<o:p></o:p>

<o:p> </o:p>

  • 完整的表达式支持<o:p></o:p>

<o:p> </o:p>

  • 自动封包和解包<o:p></o:p>

<o:p> </o:p>

  • 对象方法调用<o:p></o:p>

<o:p> </o:p>

  • 对象字段赋值<o:p></o:p>

<o:p> </o:p>

  • 对象创建<o:p></o:p>

<o:p> </o:p>

  • 简单的声明式数据结构<o:p></o:p>

<o:p> </o:p>

  • 基本的if/switch/loop 支持(谨慎的使用)<o:p></o:p>

<o:p> </o:p>

我仍然犹豫是否要支持匿名类——当我们需要在对象上指定行为监听器或回调时需要使用。无论怎样,这显然增加了复杂度,我希望能够避免在推论中增加这个,可能使用一些其它方法建立在函数或方法之外。像if/switch/loop这样的控制结构可能也会被配置为可选的,或者设置一些使用障碍。这种语言应该能够同时工作在解释模式和编译模式。编译模式允许最大化的执行速度,对于小型或中型系统是理想情况——拥有数千条规则的大型系统将会遭受内存溢出问题,可能最好是使用解释模式。

<o:p></o:p>

注:在Drools4.0中作者已经使用MVEL作为这种新的语言。<o:p></o:p>

分享到:
评论

相关推荐

    Java编程思想(完整版)

    在本章,我们将探讨Java程序的基本组件,并体会为什么说Java乃至Java程序内的一切都是对象。 2.1 用句柄操纵对象 2.2 必须创建所有对象: 创建句柄时,我们希望它同一个新对象连接。通常用new关键字达到这一目的。...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包8

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包11

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包6

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包9

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    Java并发编程的艺术_非扫描

    本书对原理的剖析不仅仅局限于Java层面,而是深入到JVM,甚至CPU层面来进行讲解,帮助读者从更底层看并发技术。本书结合线上应用,给出了一些并发编程实战技巧,以及线上处理并发问题的步骤和思路。读者对象·Java...

    java开源包4

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包101

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包5

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包10

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java源码包4

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    java开源包1

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包3

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java源码包3

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    java源码包2

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    java 面试题 总结

    Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

Global site tag (gtag.js) - Google Analytics