程序员修炼之道纯文本的威力

作为注重实效的程序员,我们的基本材料不是木头,不是铁,而是知识。我们搜集需求,将其变为知识,随后又在我们的设计、实现、测试、以及文档中表达这些知识。而且我们相信,持久地存储知识的最佳格式是纯文本。通过纯文本,我们给予了自己既能以手工方式、也能以程序方式操纵知识的能力——实际上可以随意使用每一样工具。什么是纯文本

纯文本由可打印字符组成,人可以直接阅读和理解其形式。例如,尽管下面的片段由可打印字符组成,它却是无意义的:

Fieldl9=abe

阅读者不知道abe的含义是什么。更好的选择是让其变得能让人理解:

DrawingType=UMLActivityDrawing

纯文本并非意味着文本是无结构的;XML、SGML和HTML都是有良好定义的结构的纯文本的好例子。通过纯文本,你可以做你通过某种二进制格式所能做的每件事情,其中包括版本管理。

与直接的二进制编码相比,纯文本所处的层面往往更高;前者通常直接源自实现。假定你想要存储叫做uses_menus的属性,其值既可为TRUE,也可为FALSE。使用纯文本,你可以将其写为:

myprop.uses_menus=FALSE

把它与对比一下。

大多数二进制格式的问题在于,理解数据所必需的语境与数据本身是分离的。你人为地使数据与其含义脱离开来。数据也可能加了密;没有应用逻辑对其进行解析,这些数据绝对没有意义。但是,通过纯文本,你可以获得自描述(self-describing)的、不依赖于创建它的应用的数据流。

提示20KeepKnowledgeinPlainText用纯文本保存知识缺点

使用纯文本有两个主要缺点:

与压缩的二进制格式相比,存储纯文本所需空间更多

要解释及处理纯文本文件,计算上的代价可能更昂贵。

取决于你的应用,这两种情况或其中之一可能让人无法接受——例如,在存储卫星遥测数据时,或是用做关系数据库的内部格式时。

但即使是在这些情况下,用纯文本存储关于原始数据的元数据也可能是可以接受的(参见“元程序设计”,页)。

有些开发者可能会担心,用纯文本存储元数据,是在把这些数据暴露给系统的用户。这种担心放错了地方。与纯文本相比,二进制数据也许更晦涩难懂,但却并非更安全。如果你担心用户看到密码,就进行加密。如果你不想让他们改变配置参数,就在文件中包含所有参数值的安全哈希值作作为校验和。

文本的威力

既然更大和更慢不是用户最想要的特性,为什么还要使用纯文本?好处是什么?

保证不过时

杠杆作用

更易于测试

保证不过时

人能够阅读的数据形式,以及自描述的数据,将比所有其他的数据形式和创建它们的应用都活得更长久。只要数据还存在,你就有机会使用它——也许是在原来创建它的应用已经不存在很久之后。

只需部分地了解其格式,你就可以解析这样的文件;而对于大多数二进制文件,要成功地进行解析,你必须了解整个格式的所有细节。

考虑一个来自某遗留系统的数据文件。关于原来的应用你的了解很少;对你来说最要紧的是它保存了客户的社会保障号列表,你需要找出这些保障号,并将其提取出来。在数据文件中,你看到:

FIELD-45-/FIELD10

...

FIELD-89-/FIELD10

...

FIELD-23-/FIELD10

识别出了社会保障号的格式,你可以很快写一个小程序提取该数据——即使你没有关于文件中其他任何东西的信息。

但设想一下,如果该文件的格式是这样的:

AC2745B11P

...

XY435QTYL

...

6T21988AM

你可能就不会那么轻松地识别出这些数字的含义了。这是人能够阅读(humanreadable)与人能够理解(humanunderstandable)之间的区别。

在我们进行解析时,FIELD10的帮助也不大。改成

SSNO-45-/SSNO

就会让这个练习变得一点也不费脑子——而且这些数据保证会比创建它的任何项目都活得更长久。

保证不过时

实际上,计算世界中的每一样工具,从源码管理系统到编译器环境,再到编辑器及独立的过滤器,都能够在纯文本上进行操作。

Unix哲学提供“锋利”的小工具、其中每一样都意在把一件事情做好——Unix因围绕这样的哲学进行设计而著称。这一哲学通过使用公共的底层格式得以实行:面向行的纯文本文件。用于系统管理(用户及密码、网络配置,等等)的数据库全都作为纯文本文件保存(有些系统,比如Solaris,为了优化性能,还维护有特定数据的二进制形式。纯文本版本保留用作通往二进制版本的接口)。当系统崩溃时,你可能需要通过最小限度的环境进行恢复(例如,你可能无法访问图形驱动程序)。像这样的情形,实在可以让你欣赏到纯文本的简单性。

例如,假定你要对一个大型应用进行产品部署,该应用具有复杂的针对具体现场的配置文件(我们想到sendmail)。如果该文件是纯文本格式的,你可以把它置于源码控制系统的管理之下(参见源码控制,86页),这样你就可以自动保存所有改动的历史。像diff和fc这样的文件比较工具允许你查看做了哪些改动,而sum允许你生成校验和,用以监视文件是否受到了偶然的(或恶意的)修改。

更易于测试

如果你用纯文本创建用于驱动系统测试的合成数据,那么增加、更新、或是修改测试数据就是一件简单的事情,而且无须为此创建任何特殊工具。与此类似,你可以非常轻松地分析回归测试(regressiontest)输出的纯文本,或通过Perl、Python及其他脚本工具进行更为全面彻底的检查。

最小公分母

即使在未来,基于XML的智能代理已能自治地穿越混乱、危险的Internet、自行协商数据交换,无处不在的纯文本也仍然会存在。事实上,在异种环境中,纯文本的优点比其所有的缺点都重要。你需要确保所有各方能够使用公共标准进行通信。纯文本就是那个标准。

挑战使用你喜欢的语言,用直接的二进制表示设计一个小地址簿数据库(姓名、电话号码,等等)。完成以后再继续往下读。1.把该格式转换成使用XML的纯文本格式。2.在这两个版本中,增加一个新的、叫做方向的变长字段,在其中你可以输入每个人的住宅所在的方向。在版本管理与可扩展性方面会遇到什么问题?哪种形式更易于修改?转换已有的数据呢?







































治白癜风拉萨哪家医院好
北京中医医院治疗白癜风用什么方法



转载请注明:http://www.jiaju1314.com/jyqj/1761.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了