未来GUI及其应用的研究(1) -- 基本的策略

来源:互联网 发布:大乐透公式算法技巧 编辑:程序博客网 时间:2024/05/16 14:26

GUI的开发,从来都不是一件简单的事情。它涉及很多很复杂的关系,尤其是和用户交互的时候,涉及很多状态。

一个产品,往往花费大量的时间用在GUI的开发上。对于一些企业级的应用--如OA等--来说,有大量的GUI设计工具,这些工具提供了足够多的

标准控件、数据绑定、数据源等等功能。在界面要求不必绚丽,用户体验要求不高的应用场合,GUI已经非常方便了。

而且,随着硬件的加强和分布式开发的需求,这些应该都首选B/S架构,甚至,C/S架构已经寥寥无几了。

但是,在嵌入式和其他应用场合,考虑到性能、速度等要求,仍然是以C/C++语言开发为主,虽然也有使用WebOS的设备,但是大多属于高端。


尽管在未来,WebOS及其变种,可能会大行其道。但是,毕竟WebOS不是为本地应用定制的,而且,js和本地接口的绑定,设计和开发起来,仍旧很困难。 

而且,WebOS不能解决所有GUI产品开发的整个流程。


从我做GUI的一些定制类项目的经验看,开发一个完整的产品,不仅仅是GUI一方面的问题,而且还涉及到很多方面。

通常来讲,开发一个GUI的产品,我们是这样做的:

  1. 进行需求分析,做产品设计
  2. 架构师开始做整个产品的设计,同时,UI工程师,对界面进行设计
  3. 开发者根据UI工程师的设计,做界面的实现
  4. 合并UI、数据管理等各个方面,成为一个统一的产品
这个过程,看起来很简单,也很明确。但在现实中,是不可能实现的。

首先,用户的需求往往是不明确的。尤其是在定制项目中,很多客户可能在其他领域很在行,但是在UI和产品开发上,却不行。一开始,他们自己可能都不知道应该作成什么;

其次,及时客户清楚做成什么样子,在开发过程中,根据开发的结果和进度,也会产生很多别的想法;

第三,很多时候,为了拿下单子,UI工程师常常会脱离实际,设计一些很难实现或者很不常见的界面,导致开发者在实现时,费尽心力的去想方设法的实现

第四,由于设计和实现的脱节,当实现效果和设计效果有差距时,客户往往会按照实际显示效果重新做出调整

第五,UI工程师的设计,往往只针对一个页面一种场景,没有一定的经验,往往不能预见到运行期间各种变化,常常设计出的效果,当运行状态变化后,就需要做出调整;

第六, 好的UI,自然需要风格统一一致,而UI工程师在设计时,往往局限在局部的UI,整体的调整只有在产品成型后,才开始涉及。

.....

还有很多。尤其是在一些行业领域,一些控件不能满足要求,还需现场开发。

这些都给GUI产品的开发带来的很多的问题。使得开发周期长,项目成功率低。


对于一个产品来说,UI只是其中的一部分,不是全部,尤其一些外包和定制的项目,UI不是客户的核心技术。而客户的很多核心到技术,往往都是以SDK或者库或者服务的方式存在,要形成一个产品,和UI结合起来,必须从 UI层次,定义好框架结构,然后把客户的核心内容包裹起来。

而这种框架,如果不是对客户产品很了解,而且对类似的应用很了解,而且经验丰富,具有很强的架构能力,是很难做出好的产品的。

如果一个UI库,仅仅提供一些绘制或者常用的控件的话,开发这样一个产品,其周期和风险可想而知。



从这几年,IPhone和Android的流行,可以看到,大量平滑和丰富的特效,已经成为UI的必备功能。而且,时不时还要冒出一些很炫的效果来。

这对UI的要求就更高了。


纵观目前的UI库,在嵌入式领域,在PC领域,目前已经很少有能够和IPhone和 android匹敌的库了。

而市场的需求,已经被引发,在众多的领域,大家都希望能够有很好的界面。在消费类电子设备中,这些几乎是标准配置了。


如果分析Android和IPhone在界面上的成功,我们不难发现,

首先,Android和IPhone的界面库,有很强的针对性,他们都提供了一组框架,就是针对智能手机的。这种框架非常重要,它解决了产品的可行性,解决了产品的基本外观和用户体验,也解决了开发一个应用的基本范式。开发者,只要比葫芦花瓢,就可以实现;

其次,他们提供了很多基础的功能,比如布局、特效等等,这使得开发变得很容易

第三,他们提供了很好的开发工具,使得开发变得容易。


要想在其他领域内,也实现类似的成功,也提供易于开发、易于维护的产品,我想,需要考虑新的开发模式。

新的开发模式,应该遵循实际的开发规律。

通常,开发一个新产品,如果能够首先见到一个原型,那么,就可以明确很多内容。

1. 首先,快速开发一个原型,这些有:

   1) 搭建一个产品的基本框架,使用标准的UI元素和标准的主题

   2) 用原型和客户探讨,以明确界面的流程、产品的需求等更方面问题

这个原型,需要解决的问题是:

    1) 定调子,确定好产品的基本外观和操作流程

    2) 解决产品的架构问题,确定它的基本骨架,以方便后期的添加

    3)作为UI、客户、开发三者之间,交流的平台,以平衡需求、外观、体验和可行性及性能之间的关系,防止出现脱节的现象。

这些原型,是要求可以在开发板上运行,那么,我们可以在开始的时候,就能够大致估计出产品在实际使用中的效果。

能够快速的在实际设备上运行,无论对于客户还是开发者,都是很大的信心鼓励。

2. 其次,在原型的基础上,讨论很确定外观,这些有:

   1) 可以确立整体风格,保持风格的一致性

   2)发现可以改进的地方,如果有需要,可以定制新的控件和界面元素


3. 第三,开发者可以明确和产品其余部分的结合,从而确定产品的总体框架


可以看的出,这里面有几个关键点:

1. 快速做出原型,最好的方法,就是从已经实现的产品中拿到一个,稍加修改,作为新的产品原型提供。

比如,很多产品都会类似的结构和页面:如启动画面、主菜单、系统设置等。还会有一些很常用的应用,如日历、记事本、计算器、相册等。

这些结构和应用是如此的相似,以至于,主要是不同设备的分辨率、图标等存在一些不一样。

如果能够把这些抽出来,作为已经实现的通用原型,无疑给后续的开发带来很大的便利

2. 总有一些应用,是针对客户自己特有的。

如果能够在一个通用的原型基础上,能够快速的制作页面、添加简单的事件和模拟数据,形成一个简单应用,并能够很方便的添加到通用原型中,

那么,这样的原型能够很快的实现

3. 界面总是要修改的,如果能够实现界面、资源和应用逻辑的分离,那么,界面的修改不会对逻辑代码产生太多的干扰,就可以很快的实现外观的修改。

这种事情可以和客户一起做,即时修改,即时征求客户意见,当客户满意时,UI部分就基本完成。

4. 在修改和定义界面的同时,架构师可以在原有基础上,定义出产品的总体架构,然后就可以实现和界面逻辑关系不大的部分,当这两部分都完成后,剩下的工作,主要就是系统集成了。


 如果我们有这样一套东西,可以假设一下,做一个单子,会是什么过程:

假设我们做一个MP4吧(虽然现在MP4前途很渺茫,不过,大家都比较熟悉,拿来举例容易理解)。一个芯片厂商提供了MP4的芯片,希望做一个MP4,能够播放音乐、视频,可以看电子书、浏览图片和一些其他的小功能。

当接到单子后,我们首先把通用原型拿出来,这些包括启动画面、主菜单页面、一些小程序等。然后,我们把音频和视频播放器(假设也是做好的原型,但是没有放到通用框架中),放到通用原型中。由于通用原型的接口是统一的,所以,这些程序,几乎不需要什么改动,就可以在运行。

然后,可以在客户提供的设备上,去运行和移植这样的原型,把移植的结果,给客户看,和客户一起评估

第三,当大方向确定后,就可以和客户评估每个应用的需求及细节,把他们依次记录下拉,作为开发的需求

第四,同时,可以让客户提出自己对UI和操作的意见,从而确定好整体的风格,并及时安排开发人员和 UI工程师,实现这些风格(由于界面都是确定的,所以这些工作,主要是更换图片和资源)

第五,与此同时,我们的工程师和客户的工程师一起沟通,确定好音视频播放及其他底层访问的接口和方法,做一些和底层适配的工作

第六,集成工作在这两方面的工作有进行到一定程度后,就可以进行了。以迭代的方式,不断的集成,不断的把产品呈现给客户,每次迭代,都更进一步的接近客户的需求。


这种方法,和敏捷开发是想一致的。


这种原型的方法,可以有效的解决产品边界的问题。在产品开发中,总是会出现一些过渡的设计,包括UI工程师和开发工程师,都一些这方面的倾向。或者是对自己过于自信;或者是对需求判断不足;或者是为了拿到单子,迫于压力,做一些不切实际的承诺;或者是内部缺乏有效的沟通,大家都希望做出好产品,而忘记了现实的约束,只有在具体实现时,才发现,所有的一切都晚了。


=======================================================================

结合上面的分析,要想做好一个产品,要想在竞争中取胜,对我们的UI有这样的要求:

1. 应该有灵活的可定制性。这些包括:

   1) 界面的外观应该以资源的方式提供,更换资源,即可实现对界面的改变

   2) 应该有自动布局这样的功能,以便适应不同的分辨率和大小

   3) 应该能够很方便的控件定制功能,在用到没有的控件时,可以很方便的实现

   4) 友好的数据接口,有类似数据源、数据绑定等的接口,这样,开发起来会方便很多。

   5) 应该有统一的接口,这样可以用xml等方法,作为资源把界面及其相关数据作成资源的方式

2.  框架非常重要,需要逐步提供框架:

   1) 应用管理的框架,可以方便的添加、移除应用

   2) 统一的资源管理框架,允许不同的应用共享资源,并保持一致的外观

   3) 灵活的通讯机制,在不同模块直接进行通讯,并建立一些事件驱动的机制,也解决界面、应用和模块之间的耦合

3. 积累必要的应用还是非常重要的。应用的开发也是很不容易的,一个好的应用,堪比一个小型的系统。随着开发的产品越来越多,应该把它们积累和统一起来,作为将来新产品的原型的来源。要做到这一点,很重要的是,保持框架和接口的稳定性。


后面的章节,我们将逐步的分阶段的研究。