《代码大全》——①表驱动法初体验,要的就是高级感

之前翻《code complete》(中文:代码大全)的时候,看到讲解表驱动法的地方,当时觉得很好懂。
于是在工作中,经常思考怎么把表驱动法运用到实际的代码编写中。经过一段时间的探索,才终于有点豁然开朗的感觉。
当前的项目以Mongodb作为数据载体,熟悉Mongodb的同学都知道这种nosql类型的数据库插数据非常自由,只要符合json格式,都可以被插入到表当中。这也是mongodb作为非关系型数据库 的一大特点。
数据库中有一张表test,数据模型大概是这样:

{
	"name": "name",
	"type": "a"   # 这个type的可选值为"a",“b”
	"a_value": [1, 2]    # 如果上面的type是a,这个字段名为a_value, 如果type是b,则这个key名就是b_value
}

基于上面的数据模型,数据库中可能的两条数据是这样:

{
	"name": "test1",
	"type": "weekly"   
	"weekday": [1, 2]    
}
{
	"name": "test2",
	"type": "monthly"   
	"monthday": [1, 2]    
}

虽说这样设计一个key是可变的数据模型,并不是良好的做法。但是基于这种现状,我们就可以在代码里用表驱动法去处理数据。比如当前有个需求是这样:
根据上面两条数据,得出相应的日期
那么我们在代码里处理这两条数据时,首先要看数据的type是weekly还是monthly,然后才能确定要读取的数据是weekday还是monthday,然后才能将数据正确地读取到。对不?

一般的思路就是去写个if语句:

if type == 'weekly':
	value = data['weekday']
elif type == 'monthly':
	value = data['monthday']

如果用表驱动法,写出来的代码就是这样的:

data_type = {"weekly": "weekday", "monthly": "monthday"}
value = data[data_type[data["type"]]]

当然,上面的例子非常简单。表驱动法的思想就是,设计一个“表”去存储数据,将那些因为数据造成的冗余的if语句简化。

看书的时候觉得懂了,其实不然。只有真正能够用书里的知识去处理实际问题的时候,才是懂的开始。
最后赞一下《代码大全》这本好书,写的非常易懂,但是要学会,还需要自己去感悟其中的真义。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值