摘要: 一个成功的软件系统,往往需要根据需求在不同的系统平台上运行,为了解决系统在多个平台的移植带来的风险,业务架构往往会设计相应的平台适配层来隔离不同平台的差异,如何设计一个易于扩展的平台适配层,是软件设计人员需要考虑的问题。设计1:1: 提供平台接口文件os.h2:定义如下:#ifdef OS1#define OS_Fun OS1_Fun#endif#ifdef OS2#define OS_Fun OS2_Fun#endifvoid OS_Fun();3:通过定义不同的系统宏,这个头文件展开后也就成了对应的平台的接口层。4:业务代码直接调用OS_Fun()这个统一的接口即可。5:该设计只需要一个通 阅读全文
posted @ 2012-06-20 21:30 平凡之路 阅读(2172) 评论(0) 推荐(0) 编辑
摘要: FACADE这种设计模式本身比较简单,核心思想就是外部系统同本系统的需要通过门面来进行通信,这样可以屏蔽业务细节,不管系统内部如何变化,怎么复杂,但是对外系统呈现一个简单的结构。对于软件模块采用消息通行机制的分布式系统,通常的架构设计为底层平台开放模块消息处理的注册接口,各个模块将自己的消息处理函数进行注册,我们可以把这个消息入口看成子系统的一个门面,所有的发往某个模块的消息都通过注册的消息处理函数来入口void ModuleMsgFun(){ switch(sendModule) { case module1: TODO... .... case modulen: TODO... }}这个M 阅读全文
posted @ 2012-06-19 22:11 平凡之路 阅读(816) 评论(0) 推荐(0) 编辑
摘要: 计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0. 阅读全文
posted @ 2012-06-19 20:54 平凡之路 阅读(15354) 评论(1) 推荐(2) 编辑
摘要: sqlite的分词器模块需要对输入的字符串映射为系统中的标示符,其对关键字映射使用了hash算法,其对hash冲突的解决十分巧妙。1:最常规的解决办法:写一堆判断对每个输入字符串判断是否匹配,如果匹配就映射为系统中的关键字。由于sqlite的关键字有100多个,如果每个字符串进行比较判断,无疑效率很低2:使用hash算法: 首先构造一个散列函数,该函数计算字符串得到一个hash映射表的入口地址。 在入口地址中存放对应的记录. 由于对不同的字符串进行散列后可能得到一个相同的入口地址,这就要求我们要对冲突进行解决.2.1以前遇到类似的问题,基本使用了链地址法来解决冲突的问题。例如:typedef 阅读全文
posted @ 2012-06-18 21:23 平凡之路 阅读(1983) 评论(0) 推荐(1) 编辑