表驅動法編程模式


表驅動法,讓你體驗什么才是代碼的精髓,高靈活度,高效率,更簡單,體驗代碼的魅力!(適合新手入門)

大大贊揚一番,現在我們一起體驗代碼之優雅。

先來看看代碼,你有寫過類似下面的這些代碼嗎?

片段:

1             if (('a' >= inputChar && inputChar <= 'z')||('A'>=inputChar&&inputChar<='Z'))
2             {
3                 .....
4             }
5             else if ((inputChar == ' ') || (inputChar == ',') || (inputChar == ';') || (inputChar == ':') || (inputChar == '?'))
6             { 
7                 ....
8             }

冗長的邏輯判斷,如果你是在維護代碼,這些是不是讓你很難忍受?你不得不花大量時間去閱讀前作者的代碼。

好,現在有一個問題:

  假設你在寫一個計算醫療保險費率的程序,這些費率隨着年齡、性別、婚姻狀況、以及吸煙與否的不同情況而變化的。你寫出的代碼會不會是這樣?

例:

 1 if (gender == Gender.Female)
 2             {
 3                 if (maritalStatus == MaritalStatus.Single)//是否單身
 4                 {
 5                     if (smokingStatus == SmokingStatus.NonSmoking)
 6                     {
 7                         if (age < 18)
 8                         {
 9                             rate = 200.00;
10                         }
11                         else if (age < 19)
12                         {
13                             rate = 250.00;
14                         }
15                         ...
16                         else if (age < 65) { 
17                             rate = 450.00
18                         }
19                     }
20                     else
21                     {
22                         if (age < 18)
23                         {
24                             rate = 250.00;
25                         }
26                         else if (age < 19)
27                         {
28                             rate = 300.00;
29                         }
30                         ...
31                         else if (age < 65) { 
32                             rate = 575.00
33                         }
34                     }//完成單身smokingStatus
35                 }
36                 else if(maritalStatus == MaritalStatus.Married)
37                 {
38                      if (smokingStatus == SmokingStatus.NonSmoking)
39                      {
40                          ...
41                      }
42                      else
43                      {
44                          ...
45                      }//完成已婚smokingStatus
46                 }
47             }
48             ....
49         }

很簡單是不是?   很繁瑣有木有?你能想象,把這個題目做完需要多大的代碼量。
好,現在看看表驅動法的解決這類邏輯控制結構。

首先,我們需要做的是把這些費率存入所有元素索引的數組里面,用簡單形象的描述就是,你需要定義一個類型,像這樣:

 1 //定義吸煙狀態
 2 
 3 enum SmokingStatus
 4 {
 5     Smoking_Firs = 0,
 6     Smoking = 0,
 7     NonSmoking=1,
 8     Smoking_Last = 1
 9 }
10 
11 //定義已婚狀態
12 
13 enum MaritalStatus
14 { 
15     Marital_First = 0,
16     Single = 0,
17     Maritied = 1,
18     Marital_Last=1
19 
20 }

對,它僅僅是一個枚舉類型,上述只定義了兩個類型, 我們還需要定義一個性別類型,在此就不再重復。

現在數據類型已經定義好了,現在差的就是數據了,數據可以從數據庫查出,也可從文件讀出,那就要看你怎么選擇了,

下面定義一個方法:

1 //返回費率
2 
3 private Double Rate(SmokingStatus smoking, MaritalStatus maital, Gender gender, Age age)
4         { 
5             Double rate;
6             //...
7             return rate;
8         }

我們現在需要做的,假如保險人的信息是這樣的:18歲,單身,吸煙,女。

就像這樣,優雅的代碼展示:

1 //返回相應的費率 
2 
3 double rate = Rate(SmokingStatus.Smoking, MaritalStatus.Single, Gender.Female, 18);

一看這句,是不是覺得,很簡單?你能理解他的意思,僅僅從字面上,對,就是這么簡單。

除去了繁瑣的判斷,我們要做的只是要加費率的相應數據,其他的通過Rate處理搞定,什么?費率怎么加?既然是表驅動法,就想想表是什么樣的吧?

這僅僅是表驅動法的一種。歡迎各位指正,一起學習 一起提高!

分享是一種美德~ 再見~~~

 

 

 

 

 

 


免責聲明!

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



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