《代碼大全》——①表驅動法初體驗,要的就是高級感

之前翻《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語句簡化。

看書的時候覺得懂了,其實不然。只有真正能夠用書裏的知識去處理實際問題的時候,纔是懂的開始。
最後贊一下《代碼大全》這本好書,寫的非常易懂,但是要學會,還需要自己去感悟其中的真義。

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