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

之前翻《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语句简化。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章