树状结构在资源映射配置上的应用

 

在很多应用场景中,都需要做到资源的可配置化管理。一般的方法是采用简单键值映射的方式。但对于多属性匹配的需求,这种映射方式使得程序对匹配失败条件的认定相当死板,代码的通用性和重用性都很差。

   请看一个2个字段的资源映射匹配需求:

1.       先根据大类匹配,再根据小类匹配。

2.       如果大类匹配失败,读取系统默认资源;如果大类匹配成功,小类匹配失败,读取大类默认资源;

 

先用简单映射方式实现配置和解析:(假设有2种大类,每种大类下各有2个小类;并用伪代码进行解析)

        

<root>

         <node 大类=T1 小类=t1 资源=resource1_1/>

         <node 大类=T1 小类=t2 资源=resource1_2/>

         <node 大类=T2 小类=t1 资源=resource2_1/>

         <node 大类=T2 小类=t1 资源=resource2_1/>

         <node 大类=T1             资源=resource1/>

         <node             小类=t1 资源=resource2/>

         <node                         资源=resource0/>

</root>

 

要取得各种情况下的资源至少要做2if-else判断。解析代码如下:

function  getResoure1(param_1, param_2):String{

         var 资源="";

         If(node.(@ 大类==param_1&&@小类== param_2)!=null){

                   资源=node.@资源;

         }else if(node.(@ 大类==param_1&&@小类!= param_2)!=null){

                   资源=node.@资源;

         }else{

                   资源=node.@资源;

         }

         return资源;

         }

可以想象如果是n个字段的匹配,至少要写n-1次的if判断。方法getResoure1无法重用,而且写的很难看。

 

树状的数据结构可以很好地解决这个问题。

<root 资源=resource0>

         <node value=T1 资源=resource1>

                   <node value=t1 资源=resource1_1>

                   </node>

                   <node value=t2 资源=resource1_2>

                   </node>

         </node>

         <node 大类=T2 资源=resource2>

                   <node value=t1 资源=resource2_1>

                   </node>

                   <node value=t2 资源=resource2_2>

                   </node>

         </node>

</ root >

解析代码如下:

function  getResoure2(param:Array):String{// param为参数数组

    var 资源=""

xml=root

for(var i=0;i<param.length;i++){     

                  if(xml.node.(@value==param[i])){// xml.node是取xmlnode子节点

                            xml= xml.node[0]

                  }else{

                            break;

                  }

}

资源=xml.@node

   return 资源;

}

 

树形结构可以逐层循环匹配,所以无论需要匹配多少字段都需要修改代码,方法getResoure2可重用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值