快速业务通道

诊断Java代码: 设计可扩展的应用程序,第4部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

诊断Java代码: 设计可扩展的应用程序,第4部分

时间:2011-02-11 IBM Eric E. Allen

在 上个月的专栏文章中,如果您掌握以下几点的话,那么您会明白,底层代码的可用性不会成为问题:

如何识别配置脚本

如何选择允许哪种配置

识别哪种环境要求黑箱可扩展性

衡量可扩展性所带来的构建复杂性

当提供此扩展性给配置脚本时,您 实际上正在构建一种语言。

您还认识到,考虑到应用程序的黑箱可扩展性,使用 S-expression 是一种快速建立一种配置语言的有效手段。我们将在本文深入研究 S-expression,并提供了一个如何用这些 S-expression 来快速方便地为特定应用程序建立配置语言的示例。

关于 S-expression 的一些知识

让我们回忆一下,S-expression 是由圆括号分隔的元素列表的语法表示法。S-expression 有三种形式:

空元素列表

非空元素列表

单一原子元素(如一个字)

S-expression 作为配置语言非常有用,因为它们易于解析。一般的 S-expression 解析器将数据读入程序,然后这个程序再检查表达式是否遵守更具体的语法约束。用这种方法,我们得到了解析输入的所有好处 ― 如早期的错误输入检测和增加的安全性 ― 除去了编写和维护常规语法解析器时所带来的精力消耗和开销。同样,不同于解析器生成器所构造的语法解析器,跟踪语法错误来源时,错误消息的输出可以很精确且很有帮助。

“S”较 XML 的优势

正如我在上一篇文章中提到的,使用 S-expression 的许多好处同样可以通过使用基于 XML 的配置语言而获得。基于 S-expression 配置语言较 XML 的主要优势在于它是非常轻量型的而且建立快速。

同样,在许多情况下,基于 S-expression 的配置脚本比等价的基于 XML 的脚本更易于阅读和编辑。当我们讨论下面一些基于 S-expression 脚本的示例时,请考虑在 XML 符号中它们是什么样子。

示例:给编辑器添加宏支持

假定我们希望给文本编辑器添加简单的宏支持,允许用户定义基本操作的复杂序列。我们可能甚至想加入对循环或递归构造的支持。

这里是宏的可能情形的示例:

清单 1. 简单的宏

(define (cutAndPasteAtEnd) (sequence   (cut HIGHLIGHTED_TEXT)   (move-to END_OF_DOCUMENT)   (paste CLIPBOARD))

诊断Java代码: 设计可扩展的应用程序,第4部分(2)

时间:2011-02-11 IBM Eric E. Allen

即使我们还没有讨论我们配置语言的语法和语义,您也许猜出了这个脚本的意图:一个对文本进行 剪切、 移动和 粘贴操作的序列,这些操作通常是应用程序的用户自己做的事情。

写下您希望您的语言能适合的各种脚本的示例是构建您的语言好的开端。事实上,对于您的解释器,这些示例有助于形成良好的单元测试组。

以下是更复杂宏的示例:

清单 2. 内容更丰富的宏

(define (find-and-replace target replacement) (move-to BEGINNING_OF_DOCUMENT) (while (not AT_END)   (cut NEXT_WORD)   (if (equals CLIPBOARD target)     (paste replacement)     (paste target))   (move-to NEXT_WORD)))

同样,您也许猜出了这个脚本表示应用程序脚本语言中的 查找并替换的实现。对于不熟悉 Scheme 风格语法的读者,我要指出以下几件事情:

所有操作都使用 前缀符号。这种风格使解析更容易,但对于某些操作,如 equals ,通常写成中缀操作符,这对于初学者来说,看起来会很奇怪。

if语句,如大多数语言中一样,有三个部分:按顺序写出 条件子句、 满足条件时执行的部分和 不满足条件时执行的部分。但是,同样的,为了使解析更容易,我没有用 else 关键字来标记不满足条件时要执行的部分。

这个示例说明了向应用程序添加有充分表达性的脚本语言是用来提高可扩展性的一种较佳的方法。它使得能够添加各种新功能

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号