GUI的开发方式
 
蔡学镛
 
一、GUI子系统的开发阶段
    正常情况下,GUI的开发和一般的软件开发一样,都需要经过需求、分析、设计、实践、测试这五个阶段。先收集客户的GUI需求;然后将需求分析成为可行的作法;接着设计出GUI画面,和客户进行沟通;接着开始实践画面,功能的部分先用假函数取代;最后进行测试。
    GUI子系统和核心系统功能的开发,可以彼此独立开发,独立测试,最后再整合,但两者之间必须先定义好沟通接口。可以让GUI子系统当主程序,核心系统当动态链接库DLL。对OOP来说,一般还会使用到MVC模型,来让数据、呈现、处理分开。
 
二、GUI开发的参与者
    需要GUI工程师、美工人员和艺术指导共同参与。美工人员需要对PHOTOSHOP等绘图软件相当熟练,并根据工程师的需要做出适当的图片和动画。GUI工程师需要熟悉相关的编程语言与GUI API,可以写出GUI程序。艺术指导必须有丰富的配色与画面配置经验,并能从使用者的角度看事情。艺术指导必须能适当地和现实需求妥协,不要对艺术有太多无谓的坚持。
    有许多应用软件,本身核心没有什么问题,就只是被丑陋且难用的GUI给害了。
 
三、GUI开发的技术难度
    GUI的技术含量高不高,要看使用什么技术而定。通常好的GUI API,会让技术含量变得相当低,因为它已经将复杂的部分隔离起来,一般的GUI工程师不需要知道太多细节。通常越有弹性的GUI,使用起来也就越麻烦,技术含量也就越高,例如JAVA SWING。
    大致上讲,GUI工程师需要熟悉各种组件、各种LAYOUT、事件处理模型、绘图API、双重缓冲。所谓的“双重缓冲”,是用来减少画面闪烁的技巧。
 
四、GUI框架内部的实作方式
    从1990年代后期,Light-Weight组件就渐渐成为GUI的主流。它是指组件是链接库自己绘制出来的,而不是OS提供的。好处是,可以自由变化组件的外观,不受到OS的限制。
    Light-Weight组件的框架也会有自己的事件模型。外观和事件都独立于OS之外,自然会比较容易移植到其他平台。为了让GUI更容易移植,许多GUI套件多少会用到GUI抽象层,来隔绝底下的OS。
 
五、GUI设计方式的未来变化
    将有一部分的GUI设计XML化,确实有一些好处:(1)方便美工人员处理;(2)将外观设计再往上抽象一层,可以依据不同的装置产生不同的结果。
    CSS在GUI设计上,会越来越重要。只要改变CSS,就可以呈现出截然不同的视觉效果。CSS不只用在网页上,连一般的桌面GUI也可以用。未来,可以GUI的DSL(Domain Specific Language)会越来越流行,甚至有机会整合出一套共通的GUIL(GUI Language),可以用来和底下的GUI Server沟通,以控制GUI的呈现。类似SQL控制DBMS的概念。
 
六、GUI 越来越重要
    虽说美色只是一层皮,但良好的GUI ,确实是让人第一眼就产生好印象,使用起来更是觉得顺手。多花一点时间投资在GUI的开发上,是绝对值得且有必要的。
 
转自《程序员》2008.09