函數要短。但不是為了短而短,而是為了表達意思,讓讀者看了這個函數而能迅速的把握函數要帶來的信息。盲目的為了短而,並不是初衷,也不是目的。 函數只做一件事。依照單一職責原則(一個類只會因為一個原因改變)設計函數。一個函數要麼進行流程式控制制(即方法裡面先調用A方法,再調用B方法,再調用C方法,依次調用,這... ...
- 函數要短。但不是為了短而短,而是為了表達意思,讓讀者看了這個函數而能迅速的把握函數要帶來的信息。盲目的為了短而,並不是初衷,也不是目的。
- 函數只做一件事。依照單一職責原則(一個類只會因為一個原因改變)設計函數。一個函數要麼進行流程式控制制(即方法裡面先調用A方法,再調用B方法,再調用C方法,依次調用,這種方法只起到拼接傳遞,串接流程的作用)或邏輯判斷(什麼是邏輯判斷,比如買火車票,根據身份證號判斷,此人是否有買過當天同車次的車票),要麼改變某事物的狀態(比如:買火車票,檢查用戶退票次數,一天是超過三次,如果是就把當前用戶給鎖上,今天就不能再進行買票了,更改用戶的鎖定狀態),要麼計算並返回結果,要麼調用多個下一抽象級的其他函數(另一種流程式控制制而已)。不要有多餘功能。
- 最好把函數分解成多個抽象層級來設計,同一層級的函數,依照倒樹狀圖來設計函數。
- 函數不應該有作為標識的參數,這意味著函數會有多種不同的執行方式被改變。
- 函數參數最多有兩個,或者是具體的操作值,或者是封裝之後的參數對象。
- 自身行為狀態的改變,不應該讓外界去改變,應該由對象本身對外提供改變的能力,例如:判斷用戶是否可以構買火車票,應該由用戶本身提供是否可以買火車票的函數,而不應該調用一個函數在對象外操作,來改對象內部的操作。把改變類x的狀態的函數調用addFooter(x),改為x.addFooter()。
- 函數不要返回錯誤碼,這需要你有錯誤碼的枚舉類,並且違反了開放封閉原則(你需要加入新錯誤碼來擴展新錯誤),直接拋出異常就好了。(可以通過繼承父異常來擴展)
- 函數名稱描述清楚,不要有歧義,不要容易混淆,註釋寫場景,能不用文檔說明就不用。