- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
蜜柚 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 : // Constructors and destructor
, public
MU6Event , public
MU6Observer
CU6Base ();
/**
Destructor.
*/
~CU6Base ();
public : // 来自于 MU6Observer
virtual
TBool NoticeEventL
( const TDesC aModeName,
const
TDesC
aDllName,
TInt aCommandId,
const TDesC8 aCommandData) = 0;
public
: // 来自于 MU6Event
virtual
TBool
U6EventL
( const TDesC aModeName, const TDesC aDllName,
TInt aCommandId,
const
TDesC8 aCommandData) = 0;
public
:
/*
功能:
获得名字
*
参数:
-
*
返回值:
返回引用
*
注解:
-
*/
virtual
const
TDesC GetName ();
/*
功能:
获得模块类型
*
参数:
-
* 返回值:
模块类型 ,1 为内核模块
, 不可见
,2
为流程模块
* 注解:
-
*/
v
原创力文档


文档评论(0)