1.第一种是这样的:
activities = [ { name: "first activity", sign_ups:[], bids:[] }, { name: "second activity", sign_ups: [ {name:"张三",phone:"13600000000"} ,{name:"李四",phone:"13600000000"}] bids:[ {name:"竞价1", biddings :[] },{name:"竞价2", biddings : [{name: "张三", phone:"13600000000", price: "10"}] }] } ];
这种数据结构在本地存储,看起来结构比较清晰,就只需存储一个大的对象数组,每个对象由三个属性构成,这三个属性分别存储每个活动的活动名称、活动报名信息以及活动竞价信息。其中竞价信息的存储比较复杂,竞价信息的每个对象又嵌套了一个对象数组。所以对竞价信息的增删改查实现起来相对比较复杂.用到了大量的underscore。
比如要存储竞价短信的内容到本地,要像下面这样实现:
bidding.save_bid_=function(activity,phone,bid){ var bids= _.map(activity.bids, function (bid) { if (bid.name == localStorage.current_bid) { var bidder = new bidding(localStorage.current_name, phone, bid) bid.biddings.push(bidder) } return bid })
2.第二种数据结构是这样的:
activities = { "0":{ name: "first activity", sign_ups:[], bids:[], biddings:{} }, "1": { name: "second activity", sign_ups: [ {name:"张三", phone:"13600000000" }] bids:["竞价1","竞价2"], biddings:{ "竞价1":[ {phone:"13600000000", price: "12"}, {phone:"15600000000",price: "10"}] "竞价2":[ {phone:"13600000000",price: "10"}] } }
这种存储结构外层是一个大对象,对象里面还对应存储了每个活动的id,每个活动由四个属性构成,比上一种多出一个专门用于保存竞价的数组。这样很容易在页面上渲染出竞价列表,避免了第一种数据结构的经过复杂的运算才能提取出竞价页面需要显示的数据 。这种数据结构很容易实现对其中数据元素的增删改查,用起来很方便。
3.第三种数据结构是这样的:
activities = [{id:"0", name: "first activity" },{id:"1", name: "second activity"}] sign_ups = [{name:"张三",phone:"13600000000",activity_id:"0"}, {name:"李四",phone:"13600000000",activity_id:"0"}, {name:"王五",phone:"15600000000",activity_id:"0"} ] bids = [{name: "竞价1",activity_id:"0",biddings[]}, {name: "竞价1",activity_id:"1",biddings[ {phone:"13600000000", price: "12"}, {phone:"15600000000",price: "10"}]}]
这种数据结构共存了三个数组,每个数组各司其职 ,activities[]用于存储所有的活动名并且为每个活动加上惟一的标识id;sign_ups[]用于存储所有的活动报名信息并给每一条报名信息提供相应的活动id,bids[]用于存放所有的竞价信息,并表明所属的活动以及所属的竞价,相对于以上两种来说,代码上的实现显得更为简单。另外由于本地存储空间的容量限制,可以将三个数组分别存储于三个存储空间,所以这种数据结构的扩展性高于前两种。
另外,对测试的书写形式有了进一步的认识,在测试的代码结构有了一定的了解,对以后的测试编写很有帮助。