`
hxpwork
  • 浏览: 111344 次
  • 性别: 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编码总结1

    【标题】:“Java编码总结1”主要涉及到Java编程语言中的编码问题,这在软件开发中是至关重要的。编码问题往往会导致程序出现难以预料的错误,尤其是处理多国语言或者特殊字符时。Java作为广泛使用的跨平台语言,其...

    java编程那些事儿

    对于有经验的开发者来说,学习新的编程语言往往只需要关注“如何描述”,因为他们已经掌握了“做什么”和“怎么做”的方法论。 ##### 2. Java语言基础及应用 Java作为一种广泛使用的面向对象编程语言,具有良好的...

    Java编程思想和阿里巴巴Java开发手册pdf.zip

    总的来说,无论是深入学习Java编程思想,还是遵循阿里巴巴Java开发手册的规范,都能帮助开发者提升专业技能,写出更高质量的代码。这两份资料结合使用,将形成一个完善的Java学习路径,对于想要在Java开发领域有所...

    Java编程规范学习资料

    通过深入学习和实践,你可以提升自己的编程素养,写出更高质量的代码,同时也能为团队合作创造更好的环境。记得在复习时不仅要理解规则,更要将其融入到日常编码习惯中,这样才能真正发挥规范的作用。

    Java编程规则教程

    ### Java编程规则教程 在Java开发领域,遵循一套详尽且规范的编程规则是至关重要的。这不仅能提高代码的可读性和可维护性,还能确保软件的质量与性能。以下是从给定文件摘要出的关键知识点,深入解析了Java编程中...

    Java编码规范中文版

    最后,Java原始码档案范例展示了以上规范的具体应用,它为开发者提供了一个规范书写的实例,帮助他们更好地理解和运用Java编码规范。 总而言之,Java编码规范为Java开发人员提供了一套完整的编码标准,这套标准不仅...

    java判断文件编码格式 三方工具包 cpdetector_1.0.10.jar

    总的来说,`cpdetector_1.0.10.jar`是Java开发中的一个实用工具,它提供了高效且准确的文件编码检测功能,帮助开发者更好地处理文本数据,避免因编码问题而引发的程序异常。通过理解并熟练使用这类工具,可以提升...

    Java编码音乐播放器简化版

    总的来说,【Java编码音乐播放器简化版】项目是一个很好的学习资源,可以帮助开发者深入理解Java Sound API,掌握音频处理的基本技巧,并了解如何利用第三方库来扩展Java应用程序的功能。对于那些希望进入游戏开发、...

    java API和编程规范中文版

    本资源包含Java API的中文版以及Java编程规范,旨在帮助中国开发者更好地理解和应用Java技术。 首先,Java API(Application Programming Interface)是Java平台的核心组成部分,它提供了大量的类和接口,供开发者...

    Java语言编码规范Sun.pdf

    在Sun Microsystems公司提出的Java编码规范中,涵盖了从文件命名、文件组织、缩进排版、注释风格、声明、语句、空白、命名、编程惯例直到代码范例的方方面面。 首先,编码规范的存在对于软件维护非常重要。根据规范...

    Fortify SCA 代码规则库-支持Java

    描述中提到的“Fortify在线规则库网址”是指Fortify官方提供的在线资源,这里可以找到最新的规则更新、文档和示例,帮助开发者更好地理解和使用这些规则。这个网址是学习和查找有关Fortify SCA规则库信息的重要来源...

    java_各种编码转换源代码

    通过学习和理解这段代码,开发者可以更好地理解和处理Java中的编码问题,确保数据的准确性和一致性。 总的来说,编码转换是Java开发中不可或缺的一部分,尤其在处理多语言、多平台的数据时。`CodeConvert.java`提供...

    java自动识别网站 文件的编码

    总结来说,自动识别网站文件的编码在Java开发中是一项重要技能,涉及到字符编码的基本原理、Java的IO流操作以及第三方库的使用。通过对给定的代码和示例进行学习,开发者可以更好地处理各种编码问题,提高数据处理的...

    java网络编程 源代码

    孙卫琴的这部作品深入浅出地介绍了Java进行网络编程的基础知识和实践技巧,对于初学者来说是一份很好的学习资料。 首先,我们要理解Java网络编程的基本概念。在Java中,网络编程主要涉及Socket编程、HTTP协议处理、...

    Java 极限编程-英文版-高清无书签

    在阅读《Java 极限编程》的英文版时,读者不仅能学习到Java编程的高级技巧,还能深入了解极限编程的实践和文化,这对于任何希望提升开发效率和代码质量的Java开发者来说都是一份宝贵的资源。通过这本书,你可以学习...

    JAVA编码规范 JAVA变成好习惯

    **JAVA编码规范** ...以上所述仅为Java编码规范的一部分,实际应用中应结合具体项目需求和团队习惯来制定更详尽的规范。通过遵循这些规范,可以显著提升代码质量和团队合作效率,使得JAVA编程成为一种良好的习惯。

    JAVA编码规范,编码规范

    ### JAVA编码规范详解 #### 1. 为什么要有编码规范? 在软件开发过程中,编码规范扮演着极其重要的角色。尤其对于使用Java语言的企业和个人开发者来说,遵循一套统一且明确的编码规范不仅能够提高代码的质量,还能...

Global site tag (gtag.js) - Google Analytics