2009年8月31日星期一

product,content和item

今天想弄清楚产品(product),内容(content)和item(item又分电信定义的item和高通定义的item)之间的关系。到现在对这些还不是很明了,主要是因为没有和实际联系起来,光看代码和配置文件只能了解皮毛。

例如,我知道product下可以包含多个content,每个content也可以包含多个item(电信定义的item),代码也是这样操作解析的,但是这三者到底对应现实中的什么?比如,一款游戏:魂斗罗,它到底算哪样?是product?content?还是item呢,这个到现在还是浆糊。这不弄清楚,对整个代码和系统就不能完全把握。

所以今天从电信的文档和配置文件开始。我先看了productinfo配置文件,和电信文档配合一起看,productinfo配置文件内容很简单,基本上没有什么有效信息,需要关注的只有这几个tag:productID,chargingPolicyID。还有一个serviceID不知道有什么作用。productID是该product的标识,很重要,很多地方都要用到。chargingPolicyID,计费策略,这是电信方面的概念,电信叫charging policy,高通那边叫price plan,本质上是一样的,名称不同而已,当然形式和操作上也有些区别,这个在电信文档的附录“附录 D: BREW 产品计费策略与 ISMP 内部处理关系”有详细的说明。chargingPolicyID标识一个charging policy,也是很重要的,有一个配置文件charginfo.xml,productinfo和charginfo之间要建立联系,就要通过这个 chargingPolicyID。

除了这两个tag,其它的基本上可以忽略。productinfo文件内容相对简单。而上面提到了 charginfo文件,其实charginfo和厘清product,content和item之间关系这个主题的关系不大,这里只是简单介绍一下。产品计费策略信息文件的内容,比如productinfo要稍多,但是值得关注的tag也不多:chargingPolicyID,baseFee,FeeType。chargingPolicyID不用说,FeeType很重要,在代码中就是根据它来解析的。

下面看内容描述文件,这个文件里包含了有关内容的信息。内容描述文件可以包含多个内容,每个内容的tag是“contentInfo”,在每个contentInfo下又包括几个很重要的tag:contentID,itemID,contentURL,modelList和itemBREWProperty,contentID 和itemID不用说,是content和item的唯一标识。从内容描述文件可以看出,一个content是可以包含多个item的。在 contentInfo这个tag下,可以关注一个问题,就是所有与item相关的信息都是放在“Item”这个tag下的,每个contentInfo 可以包含多个Item,标识每个content可以包含多个item,那么content和item到底对应现实中的什么呢?

从电信文档里对Item的解释可以看出端倪,文档里是这么解释的“ 同一content下的不同Item提供针对同一内容的不同终端类型适配的能
力” 从这段解释可以看出:item是针对于不同终端的。而从各自的配置文件内容,也可以印证。首先看productInfo,这个配置文件里面包含了 chargingPolicyID,说明product这个概念,是针对于收费策略的,也可以这样理解,有着相同收费策略的应用,我们都可以把它们看作是同一产品。

而对于content,它比product要小,他和收费策略没有直接关系,可以把它看作某个现实的应用,例如游戏魂斗罗。它可以看作一个content,但是item又是什么,更加电信文档里的解释,item是针对某个或者是某类终端的content,例如魂斗罗是一个 content,但是对于两个手机,姑且称为手机1和手机2,手机1和手机2的硬件不同,例如屏幕大小等等不一样,语言的选择不一样(一个使用英文,一个使用中文)等等不同。对于同一个内容:魂斗罗,不能在两个手机上都适用,所以针对手机1,有一个适用的应用,姑且称为魂斗罗1,这个就是item,而对手机2,同样有个魂斗罗2,这也是个item。所以魂斗罗这个content下面根据不同的手机终端,就有了两个item:魂斗罗1和魂斗罗2。这两个 item是属于魂斗罗这个content的。

在内容描述文件中,itemInfo这个tag下包含的东西值得关注,首先是itemID,这没什么好说的,然后是contentURL,这个很重要,它表示内容实体文件在远程FTP上的存放路径。另一个值得关注的是modelList标签,它表示这个item支持哪几款终端,例如W219,D06,C510,表示这个 item支持的终端有三种:W219,D06和C510。从这里可以看出,item和终端是紧密联系的。

到此,可以这样说,product,content和item,它们的作用范围逐渐减小,逐渐具体。它们的侧重点也是不一样的,product的侧重点是计费,content的侧重点是应用,item的侧重点是适用的终端类型。现举下面的一个例子来说明它们的关系:
有一个product,包括两个内容:魂斗罗和三国志。它们的计费策略都是一样,都是包月10块。如果还有一款应用也使用这个计费策略,也可以加入到这个产品中来。对于魂斗罗这个content,针对iphone,Gphone和Nokia N95,这三款终端,又有了三个item,分别是魂斗罗1,魂斗罗2,魂斗罗3。这三个item分别使用于三款手机,某个item不能被安装到其它两个终端上。

电信的系统是以product为中心的,围绕着product。而高通的系统,没有product,是围绕着item的。对于高通的item,现在还不了解,应该和电信的item有很大的相似处。但是要弄清楚的是,高通的计费策略是不是针对item的,或者说是于计费策略是和 item绑定的。因为电信的计费策略(charge info)是和product绑定的。

没有评论:

发表评论