这一部分内容作者分为了两个部分来进行描述,通过对GNU Emacs滋长的特性分析以及KDE社区是如何发展ThreadWeaver和Akonadi项目和他们的形成来让我们领略到最终用户应用架构的内涵。
第十一章 GNU Emacs:滋长的特性是其优势
Emacs是由Richard Stallman用Lisp语言编写的唯一的一种优美的计算机编程语言。它很庞大,而且只能编辑纯ASCII的文本文件,也就是说,没有字体、不能加粗、无法加下划线等......Emacs对许多广泛接受的、有用的、有价值的软件工程原则都不屑一顾。其代码已经有24年的历史了,体系庞大,是由成百上千的不同开发人员共同完成的。然而它的工作得很好。其功能不断地成长;用户界面中不断增加了许多令人着迷的新行为;而且整个项目有效避免了对基础架构的大幅修改、频繁的交互、领导者的冲突和分歧。
Emacs架构所采用的是在交互式应用中应用广泛的模型-视图-控制器模式。在该模式中,模型是程序所操作数据的底层描述;视图则向用户展示数据的方法;而控制器则负责实现用户与视图的交互,并对模型进行相应的更新。
模型:缓冲区 Emacs是用来编辑文本文件的,因此Emacs的模型中最为核心的是用来保存文本信息的缓冲区。缓冲区就是简单的字符串,在每一行的行末是新行字符;它并不是一个行的列表,也不是像Web浏览器展示HTML文档时使用的文档对象模型那样的节点树。Emacs Lisp对于缓冲区的基本操作包括添加、删除文本,以字符串的形式析取缓冲区中文本的一部分,通过精确地字符串或正则表达式来搜索匹配的字符串等。
视图:Emacs重绘引擎 当用户编辑文本信息、在窗口上操作时,Emacs的重绘引擎将确保显示信息做出相应的更新。Emacs重绘引擎有两个重要的特征:Emacs将自动更新显示;Emacs仅当等待用户输入时更新显示。
控制器:Emacs Lisp Emacs的核心是用自己独立的Lisp语言变体开发的。在Emacs实现的模型-视图-控制器模式中,Lisp代码扮演的是控制器的角色:你调用的所有命令,不管是通过键盘、菜单还是名称,几乎都是一个Lisp功能模块。
第十二章 当集市开始构建教堂
本章作者着力于对KDE项目的剖析来向我们介绍。KDE项目作为当今世界上最大的几个自由软件成果之一。其贡献者来自很多不同的人群。
Akonadi:针对KDE4.0的个人信息管理基础设施层
Akonadi的一个核心观念是为系统中所有的PIM数据和相关的元数据建立一个集中的缓存。然而老框架假定对后端存储的访问通常是在线式的,而Akonadi引用了本地副本机制,这样当需要向用户显示数据时能够马上提供,例如它可以保留许多可能已经获得的数据,以便避免不必要的重新下载。Akonadi中还有一个基础性的视角,它在其第一次迭代的设计中就已经存在,那就是用来访问特定类型存储后端的组件将以单独的进程运行。
ThreadWeaver:一个用于高级并发管理的小型程序库
ThreadWeaver现在是KDE4.0中的一二核心程序库。ThreadWeaver是一个并发作业调度程序。其目标是在多线程软件系统中管理和分配资源的使用。其第二目标是为应用程序开发人员提供一个实现并行机制的工具。