party_bid三种数据结构

写完party_bid三种数据结构有几天了,这是第一次接触测试代码,对测试驱动开发有了一点理解,今天来总结一下我对这三种数据结构优势劣势的认识:

1.第一种数据结构:

activities = [
    {
        name: "first activity",
        sign_ups:[],
        bids:[]
    },
    {
        name: "second activity",
        sign_ups: [
            {
                name:"仝键",
                phone:"13600000000"
            }
        ],
        bids:[
            {
                name:"竞价1",
                biddings : [
                    {
                        name: "仝键",
                        phone:"13600000000",
                        price: "12"
                    }
                ]
            }
        ]
    }
]

这种数据结构比较清晰,整个数据结构最外层只有一个对象数组,每个对象中包含三个属性分别是每个活动的活动名称,活动的报名信息及竞价信息,其中竞价信息的数组中又嵌套了对象,每个对象由竞价名和竞价名对应的竞价信息组成,所以这部分比较复杂;虽然这种数据结构整体比较清晰但是存取起来很复杂。

这种数据结构要想存储竞价信息,可以通过一下代码实现:

bid.create_new_bid = function (activity_name) {
    var activities = JSON.parse(localStorage.getItem("activities")) || [];
    var bid = _.map(activities, function (list) {
        if (list.name == activity_name) {
            var counter = list.bids.length + 1;
            var name = "竞价" + counter;
            list.bids.push({"name": name, "biddings": []});
        }
        return list;
    })
    localStorage.setItem("activities", JSON.stringify(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"
                }
            ],
            "竞价2": [
                {
                    phone:"13600000000",
                    price: "10"
                }
            ]
        }
    }
}

这种数据结构也比较清晰,但是与第一种数据结构有所不同的是整个存储结构最外层是一个大对象,这个对象里存储着每个活动的id号,每个id下存储着活动名称,报名信息,竞价名称及竞价信息四个属性,与第一种数据结构相比多出了一个用来存储竞价名称的数组,这样就更容易提取出竞价页面需要显示的数据,避免了复杂的存取过程,相比之下存取更简单。

这种数据结构要想存储竞价信息,可以通过一下代码实现,(相比第一种更为简单):

bidding.create_new_bid = function (activity_name) {
    var activities = JSON.parse(localStorage.activities);
    var counter = activities[activity_name].bids.length + 1;
    var name = "竞价" + counter;
    activities[activity_name].bids.push({"name": name})
    activities[activity_name].biddings[name] = [];
    localStorage.setItem("activities", JSON.stringify(activities))
}

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:"1"
    }
]
bids = [
    {
        name: "竞价1",
        activity_id:"0",
        biddings:[
            {
                phone:"13600000000",
                price: "9"
            }
        ]
    }
]

这种数据结构没有前两种清晰,包括了三个数组,扩展性优于前两种,并且代码上的实现更为简单。每个数组都存储着各自相关的信息,activities[]存储每个活动独有的id标记,sign_ups[]存储活动的报名信息并通过id标记来区分报名信息,bids[]存储竞价信息,并表明所属的活动以及所属的竞价。

相关推荐