采用掩码方式简化产品国家地区支持能力的表示
2014-05-16 16:38
218 查看
一、背景描述
某系列产品中,不同产品、国家和地区支持不同的配置项(但差异不大)。各配置项均由其BranchLeaf结点值(BLV)唯一标识。作为ONU通用配置媒介之一,某模块对各配置项创建合法性校验函数IsBranchLeafValid(…),其中包含的结点列表表示产品缺省支持的所有配置项,类似“白名单”;此外根据各国家地区的要求创建屏蔽函数IsBranchLeafScreened (…),其中包含的结点列表表示该国家/地区不予支持的配置项,类似“黑名单”。其中,“黑名单”列表为“白名单”列表的子集。两个名单结合起来对接收到的OLT配置帧进行校验,从而表现出不同的支持能力。
因此,对于M个产品,N个国家地区,在物理上将需要M+N个黑白名单。具体实现上,黑白名单函数内充斥着大量if...else与switch...case结构:
BOOL IsBranchLeafSupported(OAM_BRANCH_LEAF eBranchLeaf) { INT32U dwMapIdx = 0; for(dwMapIdx = 0; dwMapIdx < gOamCmdMapNum; dwMapIdx++) { if(eBranchLeaf == gOamCmdFuncMap[dwMapIdx].eBranchLeaf) break; } if(dwMapIdx == gOamCmdMapNum) { CtcOamLog(FUNCTION_Oam,"Unknown BranchLeaf(0x%08X)!\n", eBranchLeaf); return FALSE; } if(GET_BIT(gOamCmdFuncMap[dwMapIdx].ucProductMask, PRODUCT_SHIFT) //也可先&&后GET_BIT && GET_BIT(gOamCmdFuncMap[dwMapIdx].dwNationMask, gdwRegionVer.ucNatShift) && GET_BIT(gOamCmdFuncMap[dwMapIdx].dwRegionMask, gdwRegionVer.ucRegShift)) return TRUE; return FALSE; }
View Code
四、总结说明
1. 采用掩码的表示方法,可极大地消除冗余度和增强扩展性。可支持10个产品、32个国家及31个地区的不同配置能力,已支持5个产品、1个国家(缺省)和两个地区,后续新增产品、国家、地区只需要修改掩码值即可,无需增加代码。
2. 相比原有做法,掩码方式在可读性和易用性方面稍嫌不足,可编写掩码的生成和解析函数或工具予以弥补。
相关文章推荐
- UNIX常用的IP表示掩码方式转换为字符串的程序实现方法
- Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
- 像QQ一样,通过代理进行通信的技术(支持socks5,http代理,采用浏览器设置等方式)
- 全球地区选择,支持中英文切换。国家-省市-城市-地区
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
- 如何将c++的struct表示为C#,并把 bytes? Marshal的方式仅支持简单类型,不支持char A[20]的形式。
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
- zh-cn en-uk表示语言(文化)代码与国家地区对照表
- 关于集成第三方office的sdk产品,采用servlet方式将数据库表BLOB字段文件下载与二进制文件上传到blob
- 关于Spring2.X AOP采用Annotation方式不支持JDK1.6的解决办法
- 美国 Sony Mobile 表示暂时不会在自身的 Smart Watch 产品中采用 Android Wear 平台
- 产品经理可采用的团队激励方式
- spring对AOP的支持(采用Annotation的方式)
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
- Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
- VMware9.0下采用默认方式安装的Redhat Enterprise Linux 5后配置vim支持中文
- go调用其它C库,若采用命令行方式,不支持重定向的输出解决;smp协议未打开,发送信息到对方,没人响应
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
- zh-cn en-uk表示语言(文化)代码与国家地区对照表
- spring对AOP的支持(采用配置文件的方式)