Welcome 微信登录

首页 / 软件开发 / JAVA / 诊断Java代码: 设计可扩展的应用程序,第4部分

诊断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))