做移动平台的开发不知不觉已经几年,先后接触过Kjava、Symbian、Windows mobile平台,做过游戏,也做过应用,而且以联网的居多。
我也时常辗转于不同平台间代码的移植,Java到C++、C++到Java,期间大多的时间浪费在平台框架的不一致性上。
而移动开发的平台又层出不穷,继以前的Kjava、Brew、Symbian、Palm、Linux、Windows mobile又先后出现了Gphone和iPhone平台。
可以想象的是,在不远的将来会有越来越多的移动开发平台。
于是,我业余时间时常在想,如果能有那么一套框架,每个公司都采用这个开源的框架来进行程序的架构,该能节省程序员多少累死的脑细胞啊!
当然,这么一套开源的首先应该是优美的、艺术性的,我一直思考如何运用艺术的眼光来看待编程。每个人都有爱美之心,每每读到别人层次关系藕断丝连的代码时,总是忍不住心情浮躁,更多时候是读了一半读不下去了。也就无从领会编写者的意图,那么程序做为一门程序员之间交流的工具也就无法彻底的发挥应有的作用。
而一份艺术性的代码是应该让后来者容易产生思维的共鸣的,艺术是简洁而优美的。
这份文档里我尝试努力构建这么一个有艺术性的移动开发框架,它有Java版本的、也有C++版本的,那么在Kjava平台和Symbian、Windows mobile平台之间移植的时候,至少可以节省不少力气。更重要的是,如果你能领会到这套框架,那么程序员之间的交流也就更容易和更方便。
这只是我一个美好的愿望,当然本人能力有限,未必真的能写出这么伟大的框架,所以也就希望更多的同行多提意见,“三个臭皮匠顶个诸葛亮呢!”。
我首先构建的是Kjava版本的移动开发框架,在这个版本完工之后,会着手Symbian版本的框架开发,关于Symbian版本的消息,可以先参考我之前写的一篇文章:
Symbian中所体现的软件编程艺术
http://blog.csdn.net/dongfengsun/archive/2007/04/08/1556704.aspx
那么怎么样的框架才算艺术性的框架?在我有限的理解和开发经验中,我觉得一份艺术性的框架应该有如下主要特征:
一:界面和数据的高度分离性,即把界面显示和数据的处理完全分离开来,把它们的耦合度减少到最低。
二:框架应该通俗易懂,而设计模式做为程序员之间交流框架的主要工具,在框架设计中应该占据重要地位,我们的框架设计中主要采用MVC+Observer模式(这里把MVC也做为Design Pattern之一)。
三:代码应该具备良好的可扩展性,任何一个模块的剥离、置换并不会对其它模块产生大的影响。
当然,如上三个特点是一个很高的境界,我只能尽自己的能力和经验来做到,更多的是希望大家能贡献出自己的经验,我们一起交流完善。
那么基于以上几点,我设计了如下的框架图:
我先大致来说明一下这个框架图。
第一,整体的框架采用了MVC+Observer模式,相信稍微有经验的同行对这两个模式并不陌生,那么同行之间交流起来也更容易领会对方的意图。
第二,整个框架的界面显示部分在View类及其前端,这部分内容也蛮多,我会抽取独立的时候专门来讲。但有几个原则,为了提高界面的可复用性,我把所有的界面控件元素全部抽取出来,原则上尽量不使用Kjava提供的高级UI。这些控件元素包括Button、SoftKey、ScrollBar等,这样以来即便把界面部分剥离出去,那么这些控件仍可以无影响的被复用。
所有的屏幕显示是由不同的Screen来组成,而View(Canvas)来负责不同Screen之间的切换,Screen来充当Layout的角色。
当然这些不同模块之间的切换、消息的派发都是一个问题,在接下来的专题里我会专门讲到。
第三,秉承“高度分离界面和数据”的原理。那么我们不应该让界面和数据里有任何耦合的地方。而界面是由View负责,数据及处理是由Model负责。而这两个模块之间又需要消息的传递,因为数据处理完了你要给用户一个结果啊,那么结果就需要显示在界面上。所以Observer模式很恰当的充当了这个角色。首先,Control实现Observer的接口,对屏幕的更新及显示进行一定程度的“封装”。其次,Control通过变量m_Model传递一个Observer给Model,从而实现对Model部分“监听”。
第四,Model后面的是“网络处理”、“本地文件系统”、“数据的存放和处理”等模块。
第五,我们看到View类里有个ControlQueue的队列,Model类里有个EventQueue的队列。ControlQueue队列负责维护View上所有的“Layout”,包括那些Screen应该被“激活”,从而处理消息。而EventQueue这个后台队列负责维护消息,在大部分的联网开发中,都会传递和接受网络数据包。那么这个EventQueue就是负责维护数据包,它在Model的线程中被“监听”,一旦有数据包到达,它就会分析这个数据包,分析完了调用Observer“监听器”把数据的状态变化反映到View类里。
这部分我们重点从high-level的层次设计了整个框架的流程,那么下面的专题里我们会具体应用这个模式来设计一个应用,并给出框架的实现代码。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dongfengsun/archive/2007/11/29/1907976.aspx