Word实际上是一个基于MVC模式的文档排版集成环境。
MVC模式可能是贯穿所有程序员职业的一个比较传统的开发模式:将开发分为Model、View、Controller三层。
其中,
Model层为doc文件中的根本,是指文本及其自带的属性(包括其大纲等级、从属于的样式号、各种行内格式(即不从样式集中设置的所有格式))。Model层表示代表着文档的内容和语义化的结构。
View层为doc的具体呈现,包括样式的格式设置(决定了样式的视觉呈现)、自动页码等。一个形象的理解是,相当于网页中的”换肤“功能,改变View层不影响文档内容。View层表示不包含任何文档的内容或语义化的结构。
Controller层可以体现在用户对Model层、View层的操作与控制,包括Word本身对各种域(决定引用关系、如序号、题注)的自动化控制。
(以下简称M层、V层、C层。)
MVC的好处是使得用户在更改任意一个层时,不用以及不会影响到其他层的内容。也就是说,要让M层和V层被C层的方便地控制。
举个栗子,修改标题样式的时候,为所有标题制定标题1,这样可以在主体修改的时候改变样式,二不是每次需求发生变化,都要去寻找标题的位置一个个修改。以下是直观地呈现MVC层模式特点的对话:
MVC模式
M层:我是一段作为文档小标题的文本,我的的样式为:标题3,我的大纲级别为三级。
V层:我是标题3样式,我的格式为:黑体,三号,所以M层的这位老兄你的长相就是黑体,三号。
C层:我要改变所有标题3的字号为4,只用选取样式为标题3的就行了。
非MVC模式
M层:我是一段作为文档小标题的文本,我的格式为:黑体,三号,我的大纲级别没有设置,为默认的正文。
V层:我是标题1样式,我的格式为:黑体,三号,但是并没有什么卵用。
C层:M层没有结构信息,我只能手动查找这些小标题的位置。
基于MVC模式的意义,设计Word文档应该遵循以下原则:
- 不在M层输入任何应该由程序自动生成的非语义文本。如:手动输入的序号、题注、目录等。
- 不使用V层去侵占M层内容。如使用带有重要文字内容的图片,使用任何格式上的变化去表现内容等。
- 减少使用M层去实现V层职责内的功能,尽量用样式集去沟通M层与V层。如:不使用空格控制标题文字间距,不为了避免表格截断等视图呈现的需求而使用分页符,不使用行内格式等。(不使用行内格式很重要的一点是这样格式没有语义性,破坏了m层为内容的原则,会影响文档的可维护性和无障碍性)
在我搜集的论文看来,几乎所有递交的论文在MVC上都设计不足。大多数的问题体现在视图使用m层去控制v层。从主观上来说,这样可能是为了一时的方便,或者作者并不愿意投入精力去学习Word文档设计的基本知识。因此出现了以下荒谬的设计弊端:
- 没有大纲级别或大纲级别混乱(m层结构缺失)
- 没有多级标题或多级标题没有对应大纲级别(m层结构缺失)
- 目录手动制成(m层侵占v层、c层)
- 缺少题注(m层侵占v层、c层)
- 使用图片表格(v层侵占m层)
- 使用文字引用而不是域引用(m层侵占c层)
- ...
任何递交报告的人都应该使用MVC视角重审自己的文档设计。让Word回归原本的面貌。