资源描述:
《蜜柚symbian客户端多模块开发设计文档》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、蜜柚Symbian客户端多模块开发设计文档李才2010.7.30设计目的:蜜柚项目为悠乐无线2010年度重要规划的SNS项目,该项目Symbian客户端涉及到一个项目经理及几个Symbian工程师合作开发,而在开发过程中为避免架构混乱,代码重复,工程师间开发进度不一致,工程师技能熟悉不同等情况,同时也为了支持日后尚未规划的功能接口,故采用多模块开发模式,以求达到代码流程清晰,功能划分清晰等目的.设计基本理论;设计多模块开发模式,主要的技术支持为C++多态性及观察者模式,其中C++多态实现了参与开发的工程师之间能独立地开发模
2、块而不需要过多关心其他模块的进展,观察者模式则使得模块之间彼此独立,以消息传递的方式完成一个任务多模块合作完成.设计优势:相比传统的开发方法,多模块开发有如下优点:Ø适合多人合作开发.多人合作开发如果使用传统的开发方式,会导致如果某个工程师出现编译错误会导致其他工程师暂时无法工作,停下等待处理问题的局面,多模块开发模式下工程师间只能看到已经编译好的动态连接库,不存在彼此等的现状Ø支持未知的项目需求.多模块开发为模块提供了统一的接口,对于未知的需求只要根据相应的接口就可得到框架的支持,而无需修改框架,适合将框架发布后再开发具
3、体的需求的模式Ø对代码保密有较好帮助.多模块开发过程中工程师间传递已编译好的动态连接库,而不会导致整个项目的全部代码集中到具体某个工程师手上,工程师只对自己负责的模块流程熟悉.Ø轻量化工程代码.由于整个过程已经分为多个模块,则各个模块及框架都不会出现”巨无霸”的现象,适合代码的维护及工程师间代码的接手.ØBug定位快而清晰.由于多模块是通过消息传递来实现多模块间合作完成某个任务,一旦代码出现bug,可快速地定位到具体某个模块的问题,而不需要全局查找.设计劣势:比起普通的开发方式,多模块的设计有如下劣势:Ø不甚适应于工程师对
4、整体项目的学习:多模块开发下由于各个工程师均只对自己模块负责,而不需要关心其他模块的实现过程,则除了项目经理整体把握项目外,其余工程师很难有整体把握的机会Ø多模块定位bug显得麻烦.当bug的重现需要不同工程师开发的不同模块才能重现时,多模块开发debug过程要比普通开发慢Ø动态连接库的同步更新问题:多模块开发需要某人负责动态连接库的更新并通知个人,比起单一程序开发略显麻烦.实现流程:STEP1:设计C++的多态接口;在设计多模块时,每个动态连接库的返回都应该是某个约定的接口的对象,这样框架才能统一地管理这些模块,包括有模
5、块的加载和释放,模块的消息传递,如果是UI工程的话还要管理不同模块的现实切换.本项目中该接口的定义见CU6Base.h,这里的CU6Base类为所有模块的基类,/***CCHandcnBase*用于模块类*/classCU6Base:publicCCoeControl,publicMU6Event,publicMU6Observer{public://ConstructorsanddestructorCU6Base();/***Destructor.*/~CU6Base();public://来自于MU6Observerv
6、irtualTBoolNoticeEventL(constTDesC&aModeName,constTDesC&aDllName,TIntaCommandId,constTDesC8&aCommandData)=0;public://来自于MU6EventvirtualTBoolU6EventL(constTDesC&aModeName,constTDesC&aDllName,TIntaCommandId,constTDesC8&aCommandData)=0;public:/*功能:获得名字*参数:-*返回值:返回引用*
7、注解:-*/virtualconstTDesC&GetName();/*功能:获得模块类型*参数:-*返回值:模块类型,1为内核模块,不可见,2为流程模块*注解:-*/virtualTIntGetType()=0;/*功能:设置观察者*参数:aObserver:观察者指针*返回值:-*注解:-*/voidSetObserver(MU6Observer*aObserver);protected:TRectiRect;//所在矩形区域MU6Observer*iU6Observer;//观察者指针//RPointerArray<
8、CU6Base>iBaseArray;//对象数组TBuf<32>iName;TIntiType;};STEP2:设计消息传递机制;多模块开发模式的优势在于模块彼此之间并不可见,要实现模块间的透明,就需要框架为各模块间传递消息,而各模块间的合作就只能以处理消息的方式完成,其中NoticeEventL为回