蜜柚Symbian客户端多模块开发设计文档.doc_第1页
蜜柚Symbian客户端多模块开发设计文档.doc_第2页
蜜柚Symbian客户端多模块开发设计文档.doc_第3页
蜜柚Symbian客户端多模块开发设计文档.doc_第4页
蜜柚Symbian客户端多模块开发设计文档.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

蜜柚Symbian客户端多模块开发设计文档李才2010.7.30设计目的:蜜柚项目为悠乐无线2010年度重要规划的SNS项目,该项目Symbian客户端涉及到一个项目经理及几个Symbian工程师合作开发,而在开发过程中为避免架构混乱,代码重复,工程师间开发进度不一致,工程师技能熟悉不同等情况,同时也为了支持日后尚未规划的功能接口,故采用多模块开发模式,以求达到代码流程清晰,功能划分清晰等目的.设计基本理论;设计多模块开发模式,主要的技术支持为C+多态性及观察者模式,其中C+多态实现了参与开发的工程师之间能独立地开发模块而不需要过多关心其他模块的进展,观察者模式则使得模块之间彼此独立,以消息传递的方式完成一个任务多模块合作完成.设计优势:相比传统的开发方法,多模块开发有如下优点: 适合多人合作开发.多人合作开发如果使用传统的开发方式,会导致如果某个工程师出现编译错误会导致其他工程师暂时无法工作,停下等待处理问题的局面,多模块开发模式下工程师间只能看到已经编译好的动态连接库,不存在彼此等的现状 支持未知的项目需求.多模块开发为模块提供了统一的接口,对于未知的需求只要根据相应的接口就可得到框架的支持,而无需修改框架,适合将框架发布后再开发具体的需求的模式 对代码保密有较好帮助.多模块开发过程中工程师间传递已编译好的动态连接库,而不会导致整个项目的全部代码集中到具体某个工程师手上,工程师只对自己负责的模块流程熟悉. 轻量化工程代码.由于整个过程已经分为多个模块,则各个模块及框架都不会出现”巨无霸”的现象,适合代码的维护及工程师间代码的接手. Bug定位快而清晰.由于多模块是通过消息传递来实现多模块间合作完成某个任务,一旦代码出现bug,可快速地定位到具体某个模块的问题,而不需要全局查找.设计劣势:比起普通的开发方式,多模块的设计有如下劣势: 不甚适应于工程师对整体项目的学习:多模块开发下由于各个工程师均只对自己模块负责,而不需要关心其他模块的实现过程,则除了项目经理整体把握项目外,其余工程师很难有整体把握的机会 多模块定位bug显得麻烦.当bug的重现需要不同工程师开发的不同模块才能重现时,多模块开发debug过程要比普通开发慢 动态连接库的同步更新问题:多模块开发需要某人负责动态连接库的更新并通知个人,比起单一程序开发略显麻烦.实现流程:STEP 1:设计C+的多态接口;在设计多模块时,每个动态连接库的返回都应该是某个约定的接口的对象,这样框架才能统一地管理这些模块,包括有模块的加载和释放,模块的消息传递,如果是UI工程的话还要管理不同模块的现实切换.本项目中该接口的定义见CU6Base.h,这里的CU6Base类为所有模块的基类,/* CCHandcnBase* 用于模块类*/class CU6Base : public CCoeControl, public MU6Event, public MU6Observerpublic: / Constructors and destructorCU6Base();/* * Destructor. */CU6Base();public:/ 来自于MU6Observervirtual TBool NoticeEventL(const TDesC& aModeName, const TDesC& aDllName, TInt aCommandId, const TDesC8& aCommandData) = 0;public: /来自于MU6Eventvirtual TBool U6EventL(const TDesC& aModeName, const TDesC& aDllName, TInt aCommandId, const TDesC8& aCommandData) = 0;public:/* 功能:获得名字* 参数:-* 返回值:返回引用* 注解:-*/virtual const TDesC& GetName();/* 功能:获得模块类型* 参数:-* 返回值:模块类型,1为内核模块,不可见,2为流程模块* 注解:-*/virtual TInt GetType() = 0;/* 功能:设置观察者* 参数:aObserver:观察者指针* 返回值:-* 注解:-*/void SetObserver(MU6Observer* aObserver);protected:TRectiRect;/所在矩形区域MU6Observer*iU6Observer;/观察者指针/RPointerArrayiBaseArray;/对象数组TBufiName;TIntiType;STEP2:设计消息传递机制;多模块开发模式的优势在于模块彼此之间并不可见,要实现模块间的透明,就需要框架为各模块间传递消息,而各模块间的合作就只能以处理消息的方式完成,其中NoticeEventL为回调消息, U6EventL为下发消息class MU6Observerpublic:/* 功能:观者者触发一个事件* 参数:aModeName:模块名称 aDllName:Dll名称 aCommandId:数据 aCommandData:数据* 返回值:ETrue:处理 EFalse: 没有处理* 注解:-*/virtual TBool NoticeEventL(const TDesC& aModeName, const TDesC& aDllName, TInt aCommandId, const TDesC8& aCommandData) = 0;class MU6Eventpublic:/* 功能:通知观者者一个事件* 参数:aModeName:模块名称 aDllName:Dll名称 aCommandId:数据 aCommandData:数据* 返回值:ETrue:处理 EFalse: 没有处理* 注解:-*/virtual TBool U6EventL(const TDesC& aModeName, const TDesC& aDllName, TInt aCommandId, const TDesC8& aCommandData) = 0;STEP3:动态连接库的导出接口;由于对于框架来说,各个模块都是透明的,这样框架就会以相同的接口去加载不同的动态连接库,这里就利用动态连接库的函数导出表来实现这种透明,由于Symbian的动态连接库第一个函数(Index为0)为TInt E32Dll(),所以一般是将对应的多态接口对象的作为第二个函数(Index为1)的返回值,而外部创建该对象只需使用RLibrary的LookUp(1)来实现,相应实例请参考MeyouMainModel的MeyouMainModel.cpp,注意不能再添加新的EXPORT_C函数EXPORT_C TInt E32Dll()return KErrNone;EXPORT_C CU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论