編碼原則:表驅動法


背景

表驅動法,最早接觸這個概念是看《代碼大全》,之前也在不自覺的應用,本文對這一個概念再做簡短的總結。

表驅動法

說明這個概念之前最好先給出不使用這個概念的代碼,常見的需要使用表驅動的場景有如下三種情況:

場景1:不同條件不同數據

if (key = "Key A")
{
   處理 Key A 相關的數據
}
else if (key = "Key B")
{
   處理 Key B 相關的數據
}

場景2:不同條件不同行為

if (key = "Key A")
{
   執行 Key A 相關的行為
}
else if (key = "Key B")
{
   執行 Key B 相關的行為
}

場景3:不同條件依次執行

執行 Key A 相關的行為
執行 Key B 相關的行為

有了上面三種場景,再理解表驅動法就比較直觀了,直接看表驅動的代碼:

表 = {
     "Key A": { "數據項": "數據", "行為項": "行為" },
     "Key B": { "數據項": "數據", "行為項": "行為" }
};

注:很多語言都支持將“行為”作為一等公民,如:C和C++的函數指針、C#的委托、JS的函數等。

有這樣一個表以后,替換上面的三種代碼就非常直接了,這里不再贅述。

思考

使用OO替換表驅動法

對於某些不支持OO的語言,表驅動法非常有用,對於支持OO的語言,如果表中的數據項和行為項總數如果超過了3個,建議引入簡單的繼承體系,將數據項和行為項目提取為新類型體系的成員,然后將表修改為工廠。

表的Key能否為“行為”

當然可以,只是在從表中獲取行時,使用這個“行為”決定是否返回行。

如何用表驅動法模擬23個設計模式?

完全有可能的,有興趣的朋友可以模擬一下管道過濾器模式(這個是架構模式)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM