方法設計的準則

來源:互聯網
上載者:User
讀了Jeffrey Palermo 的隨筆How to design a single method後,對他所述的方法(Method)設計的準則大部分比較贊同。方法的設計是類的設計的一部分(在物件導向設計的前提下),是比較細節的問題,但也是關乎設計是否優秀的細節。
Jeffrey Palermo 提到了下面的一些準則(斜體部分是我的理解):

1、方法的命名應清楚地表達出此方法所做的事情。

命名其實也是一門學問——看起來簡單,但往往比較有經驗的設計師才能作出比較合適的命名。不當的命名常常讓他人誤會,帶來理解上的困難。一般方法的命名使用動詞或者動詞+名詞。比如Append、Push、ShowDialog、GetName等。

2、一個方法做且只做一件事情。

有人常常一個方法中好幾件事情,這是沒有正確劃分各個方法職責的結果。做一件比較複雜的事情,可能需要分為幾個步驟來完成,我們把它拆為幾個方法(一般為private的方法),每個方法完成其中一個步驟。當然,這需要根據實際情況做合適的劃分。

3、一個方法要麼做一些事情,要麼返回一些東西。如果該方法返回一些東西的話,調用它無數次也不應當產生負面影響。

4、一個方法所佔的篇幅不應超出一屏。

這是經驗之談,如果一個方法裡面你寫了大量的代碼(比如超過50行),那該方法需要重構了。Jeffrey Palermo 甚至說一個方法最好少於10行。

5、方法的參數要少。

如果一個方法必須大量的參數,那可以將這些資訊封裝到一個Object中,現成的例子是.net framework中的ProcessStartInfo。個人認為一個方法的參數最好不超過5個。

6、方法僅僅依賴於方法的參數,或者由建構函式傳入的類成員。

7、在合適的地方捕捉異常。

在需要對異常進行處理的地方捕捉異常,否則讓其傳播。

對於方法的設計準則,在不同的語言中可能會不盡相同。比如在.net中會對傳入的參數做一些檢查,而在native C/C++的代碼中(比如wcscpy函數)總是認為調用者會保證參數正確,而根本不作任何檢查,看下面代碼:wchar_t * __cdecl wcscpy(wchar_t * dst, const wchar_t * src)
{
        wchar_t * cp = dst;

        while( *cp++ = *src++ )
                ;               /**//* Copy src over dst */

        return( dst );
}

而在c#中:
public static string Copy(string str)
{
      if (str == null)
      {
            throw new ArgumentNullException("str");
      }
      string text1 = string.FastAllocateString(str.Length);
      string.FillString(text1, 0, str);
      return text1;
}
準則歸準則,在實際開發中,還是要看具體情況。

原文連結:http://jiezhi.cnblogs.com/archive/2006/04/20/380376.html:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.