正文:
初次使用测试,party_bid_core通过一步步测试来对比三种数据结构的存储,得出其优点和不便之处.
一.在三种数据结构之前,首先要在github上建立自己的分支
1.创建git的文件夹。//取名为party_bid_core
2.登录github,点击右下侧的New repository。
3.在弹出的页面中填写Repository name,然后点击左下侧的Create repository按钮。(后会有指导性操作。)//最好分支名字为party_bid_core,方面查找
4.从terminal进入git的文件目录下,然后逐条执行3弹出的内容.
二.对三种结构的总结
第一种数据结构:
activities = [
{
name: "first activity",
sign_ups: [],
bids: []
},
{
name: "first activity",
sign_ups: [
{
name: "仝键",
phone: "13600000000"
},
],
bids: [
{
name: "竞价1",
biddings: [
{
name: "仝键",
phone: "13600000000",
price: "12"
}
]
},
{
name: "竞价2",
biddings: [
]
}
]
}
];
所有的活动存在activities中,每个活动都有自己的活动名,报名人信息,竞价人信息,结构很清晰.但是在存储时每次都要一层层寻找,有点繁琐.例如,如果想要存储bidding时,要首先找到活动名,在此活动中找signs看是否报名,如果报名了,又要找相对应的竞价名,然后存储.
Bidding.save_all = function (biddings) {
var current_bid = Bid.get_current_bid();
var activities = Activity.get_activities();
var current_activity = Activity.get_this_activity(activities);
var current_activity = _.map(current_activity.bids, function (the_bid) {
return the_bid['name'] == current_bid ? the_bid['biddings'] = biddings : '';
});
localStorage.setItem('activities', JSON.stringify(activities));
};
第二种数据结构:
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": [
]
}
}
};
每个活动都有自己的key和value,value中又有活动名,活动报名信息,竞价名,竞价报名信息,biddings中,key为竞价名字,value为竞价报名详情,结构也很清晰,存储时少了嵌套,例如:在存储竞价信息时只需通过key来确定存储位置.但是在定义key时却要多想一下,都需要以各自value的长度来增长,以存储竞价为例:
Bidding.create_new_bid = function (activity_id) {
var activities = Activity.get_activities();
var current_activity = Activity.get_the_activity(activity_id)
var counter = current_activity.bids.length + 1;
var bid_name = "竞价" + counter;
_.map(activities, function (value, key) {
if (key == activity_id) {
value.bids.push(bid_name);
value.biddings[bid_name] = [];
}
});
localStorage.setItem("activities", JSON.stringify(activities))
};
第三种数据结构:
activities = [
{
id: "0",
name: "first activity"
},
];
sign_ups = [
{
name: "仝键",
phone: "13600000000",
activity_id: "0"
},
{
name: "于硕",
phone: "15600000000",
activity_id: "0"
},
{
name: "吴",
phone: "13800000000",
activity_id: "1"
}
]
bids = [
{
name: "竞价1",
activity_name: "0",
biddings: [
{
phone: "13600000000",
price: "9"
}
]
},
{
name: "竞价1",
activity_id: "1",
biddings: [
{
phone: "13600000000",
price: "12"
},
]
},
{
name: "竞价2",
activity_id: "1",
biddings: [
{
phone: "13600000000",
price: "10"
},
]
}
];
活动名,活动报名,竞价皆分开存储,并且三者都设有activity_id,在获取当前报名或竞价信息时嵌套层数很少很方便,但是结构不算清晰,整体性不强,在存储竞价报名时需判断是否活动报名,这时又要取sign_up的数据,找到对应的id显然是很麻烦的.
三种数据结构各有优劣,使用起来觉得哪一种方便就用那一种,但是在效率方面和减少嵌套来看,个人觉得还是使用设置id的比较方便,在做party_bid时我用的是类似于第一种方法,只是bids单独存储,同第三种数据结构的bids,使用时,也很方便.
三.注意事项
1.测试的含义:测试是在给定某些已知条件的情况下,通过写可以验证所有结果的方法,来得出与expect相同的结果(因为条件已经限定,结果肯定是期待的结果才能是通过测试.但写的方法一定要是能验证所有结果的方法,如果写了一条只是为了能通过当前测试,那测试也是没有意义的)
2.每个测试之前都会给定相应的数据或限定,即前提条件.在测试结束时,清除那些数据.也就是说测试是在不影响功能的条件下进行的,每个测试都测试一个小的模块.
beforeEach(function () {
init_activity_database()
});
afterEach(function () {
localStorage.clear();
})
本文对比了三种不同的数据结构用于存储活动、报名及竞价信息的方法。第一种为数组嵌套对象,便于理解但检索繁琐;第二种利用对象存储,提高了存储效率;第三种采用独立存储活动、报名和竞价的方式,并通过ID关联,减少了嵌套,但在完整性上有待提高。
376

被折叠的 条评论
为什么被折叠?



