MDI vs SDI
(yanlb2000, 2004.11.26)
先来明确一下概念:
MDI: Multiple document interface,多文档界面
SDI: Single document interface,单文档界面
记得这两个概念是微软windows中提出的,用以区分两种风格的图形用户界面(GUI)。在Windows 3.x的时代,微软很多软件都是MDI风格的。比如,程序管理器运行时候开个大窗口,称为父窗口。在其中还有主程序组、附件组、启动组、控制面板等程序组小窗口或图标,称为子窗口,都从属于父窗口程序管理器。再如文件管理器同样如此,管理器本身是个父窗口,而其中打开的各个目录就是一个个子窗口。另外,很多其他软件也是MDI的,比如那个时代的Office4.3, Office97等。Word运行后,本身是个父窗口,包含了通用的菜单、工具栏、状态栏等公共界面元素,而打开的一个个doc文档,就是一个个子窗口了,每个子窗口只显示自己特定的文档内容。Excel也是如此。
但是,从win95开始,微软逐渐用SDI风格来取代MDI了。最明显的,比如资源管理器,一个资源管理器窗口只能显示一个文件夹的内容,要同时显示多个文件夹,就要打开多个资源管理器。而Office2000开始,word也已经变成SDI的了(但Excel、PowerPoint等还是MDI的)。每个打开的doc文档就是一个独立的桌面上的窗口。其他如IE浏览器等也是SDI的。
看来微软是抛弃了MDI风格了,为什么这样?我不知道。
但我觉得,MDI其实是个不错的界面风格。总结一下,有如下好处:
1,将相同的工作内容显示在同一个窗口中,桌面看上去简洁有序。如果桌面上开好几个资源管理器和word文档,就会乱哄哄一大堆。但如果使用SDI风格,则简化到2个窗口:MDI的资源管理器和Word父窗口。在这两个父窗口中显示多少目录、文档就无所谓了,反正不会“跑出来”乱占地方。
2,公用的界面元素同样也节省了桌面空间。比如一个程序界面总归有菜单、很多工具栏、状态栏等。在MDI下各个文档的这些公共元素是共用的,而SDI风格下每个文档都要重复显示这些元素,明显浪费了桌面空间。
3,就是资源占用问题。多窗口显然也更多地占用内存、堆栈等系统资源。如果软件设计不好,就更是如此了。
其实关于资源占用,还要看软件运行的内部机制。设计得好的SDI软件,虽然看上去每个文档都要占用一个桌面窗口,但它们在系统中只有一个实例,一个进程,只是每个打开的文档就多占用一个或多个线程。这样的程序比较好,即使多开几个文档,资源占用也不会骤升。就是说虽然用户看桌面上有多个窗口,但系统核心看起来却只有一个exe在运行。比如微软的资源管理器,Word等就是这样的SDI。
而另外一种SDI,每个打开的文档就是一个独立的实例。这样的软件,如果多开几个文档,占用资源就很历害。
举个明显的例子。著名刻录软件Nero。在版本5之前是SDI风格的,同时打开的不同的刻录任务都是Nero主窗口的子窗口。但从版本6开始,就变成MDI风格了,而且属于上面说的后面那种耗资源的MDI。在进程管理器中可以看到,新建一个任务,就会开一个Nero实例和窗口,每个新建的实例就占用20多MB的内存空间。我认为这是一个失败的改动。很多老系统用Nero5还是不错的,但用Nero6就明显感到吃力,特别是开多个窗口的时候。
我不知道为何现在有些软件不喜欢MDI风格了,但个人认为MDI这是个很有创意也很有用的用户界面风格,特别适合于那些可能同时要打开多个文档的软件。
当然,现在还是有很多优秀软件还是采用了MDI风格。比如Acrobat Reader,PhotoShop, FTPrush,UltraEdit等等。还比如,上网浏览往往会同时开很多网页,但偏偏微软的IE是SDI的,虽然内核只有一个IE实例,但窗口开多了还是非常占用资源。所以,很多使用IE内核的第三方浏览器就很受欢迎,比如MyIE,GreeBroswer,Mathon等,它们的特点就是使用了MDI风格,虽然同时开很多网页子窗口,但主窗口只有一个。这样不但扩展了很多附加功能,在开多个网页的时候资源占用还明显比IE少。