程式基本設計可以犯的最大錯誤

robertluo發表於2014-06-20

程式基本設計中,可以犯的最大錯誤,就是丟棄使用者輸入的資料。

這看起來似乎不可能,怎麼會有人這麼幹呢?可是,看看這個常見場景:

我們讓使用者輸入自己的年齡。當然在資料庫中設計一個年齡欄位。看起來很普通,是嗎?但如果你沒有同時在這條記錄中加上一個輸入日期欄位,你實際上就丟失了資訊。當然,更好的輸入設計是讓使用者輸入出生日期。之所以如此,是因為年齡不是一個基本事實資訊,它不過是出生日期這個基本事實的遞延資料。

在我正在重構的一個限量銷售的系統中,需要統計使用者的購買次數,保證一個使用者每天只能買2次,每天只能買100元以下的總額。程式設計師設計時這個限量系統時立刻設計了兩個計數器:購買次數購買總金額,他沒有犯剛才那個錯誤,同時也記下來了購買日期,這些內容都存進了資料庫。每次使用者購買時對這兩個計數器遞增即可。很完美,很高效,是嗎?

不幸的是,需求總是比你想象得更加怪異,很快客戶需要限制某種特別的產品的購買次數。而我們的兩個計數器卻找不到這個資訊!程式設計師又增加了第三個計數器x 特別產品購買次數。為了支援這個計數器,他必須對過去遞增計數器的地方加上新的處理程式碼。可以想象,程式很快變得非常難看,到處出現x 特別產品

為什麼會出現這樣的麻煩?是由於需求作怪嗎?至少在這個場景上,問題就出現在開始的計數器設計上。當我們儲存計數器而不是更基礎的訂單資訊如產品號購買數量的時候,我們就丟失了這些基本資訊,而只儲存了一些派生資訊。我們可以很容易看到:實際上我們的計數器是很容易重新從基本訂單資訊中計算出來的,但反過來,基本訂單卻無法從計數器中算出來,即使加上第三個、第四個計數器也不行。

相關文章