1、始終控制類的大小
那些超大的類在嘗試做太多的事情,這違反了單一職責原則, 為什么一定要將兩個職責分離到單獨的類中呢?因為每一個職責都是變化的中心。在需求變更時,這個變更將會出現在負責該職責的類中。如果一個類承擔了多個職責,就會有一個以上的原因導致其變化。如果一個類有多重職責,則說明這些職責已經耦合到了一起。并且某個職責的變化將有可能削弱或限制這個類滿足其他職責的能力。這種耦合將會導致非常脆弱的設計,進而在職責發生變化時,設計可能被意想不到的破壞了。
2、避免不需要的注釋
不同水平的開發人員可能都會有自己的見解。可以嘗試避免為單獨的方法或短小的類進行注釋,通常開發人員通過寫注釋來提高代碼的可讀性和可維護性,但要保證你所寫的注釋不會成為代碼中的噪音。
3、避免不必要的Region
Region 是 Visual Studio 提供的一個功能,它允許你將代碼分塊。Region 的存在是因為它可以使大文件導航變得容易。Region 還常被用于隱藏丑陋的代碼,或者類已經膨脹的非常大了需要分塊。而如果一個類做了太多的事情,也就說明其違反了單一職責原則。所以,下次當你想新增一個 Region 時,先考慮下有沒有可能將這個 Region 分離到一個單獨的類中。
4、控制方法的代碼量
方法中的代碼行數越多,則方法越難理解。抽取方法是最常見的重構方式之一,如果你發現一個方法過長,或者已經需要一個注釋來描述它的目的了,那么你就可以應用抽取方法了。人們總是會問一個方法到底多長合適,但其實長度并不是問題的根源。當你在處理復雜的方法時,跟蹤所有局部變量是最復雜和消耗時間的,而通過抽取一個方法可以節省一些時間。
5、避免方法中過多的參數
通過聲明一個類來代替多個參數。創建一個類,用于包含所有的參數。
//避免
public void Checkout(string shippingName, string shippingCity,
string shippingSate, string shippingZip, string billingName,
string billingCity, string billingSate, string billingZip)
{
//TODO
}
//建議
public void Checkout(ShippingAddress shippingAddress, BillingAddress billingAddress)
{
//TODO
}
6、避免復雜的表達式
復雜的表達式意味著其背后隱藏了一些涵義,我們可以通過使用屬性來封裝這些表達式,進而使代碼更易讀些。
7、把警告等同于錯誤來處理
我們編譯工程后會得到一個警告,但仍可以運行工程而不會發生任何錯誤。但是我們應該盡可能地移除這些警告。
8、精簡多處返回
在每段程序中都減少函數返回的數量。假設從底部開始閱讀代碼,你很難意識到有可能在上面的某處已經返回了,這樣的代碼將是非常難理解的。
僅使用一處返回可以增強可讀性。如果程序這么寫的話可能看起來比較干凈,但不立即返回也意味著需要編寫更多代碼。
9、使用斷言
在軟件開發中,斷言代碼常被用于檢查程序代碼是否按照其設計在執行。通常 True 代表所有操作按照預期的完成,False 代表已經偵測到了一些意外的錯誤。斷言通常會接收兩個參數,一個布爾型的表達式用于一個描述假設為真的假定,一個消息參數用于描述斷言失敗的原因。
尤其在開發大型的、復雜的高可靠系統中,斷言通常是非常有用的功能。
歡迎關注我的公眾號(同步更新文章):DoNet技術分享平臺
閱讀原文