好程式碼、壞程式碼之二
好程式碼、壞程式碼之二
4.多註釋,少廢話
程式碼,一定是給人看的,而程式碼本身的邏輯又決定於方法、型別和依賴的關係之中,所以,必要的註釋,是必需且必要的。透過註釋的進一步解釋,來輔助性地告知程式碼的邏輯、演算法或者流程,不僅是好習慣,更是好程式碼。
另一方面,註釋不是“無病呻吟”,沒有必要表述那些顯而易見的邏輯或者說明,同時注意區分單行註釋和多行註釋的應用。
在.NET平臺下,XML格式的註釋還肩負了另一項重要的使命,那就是根據註釋生成程式碼文件。例如:
///
/// 根據使用者資訊,構建標籤資訊
///
/// 使用者Id,根據使用者Id,獲取
/// 標籤資訊
///
public Tag BuildTag(int memberId, string tag)
{
return new Tag();
}
在Visual Studio中,可以透過選擇PropertiesàBuild來設定“XML documentation files”選項輸出生成XML資訊,例如上面的註釋資訊被生成為:
<member name="M:Anytao.Inside.Ch03.GoodCode.Tag.BuildTag(System.Int32,System.String)">
根據使用者資訊,構建標籤資訊
使用者Id,根據使用者Id,獲取
標籤資訊
透過SandCastle工具就可以基於上述資訊生成標準統一的文件資訊,基於此方式就可以建立類似於MSDN文件的專案幫助檔案,大大簡化了這項“複雜”的工作。
5.用名稱空間組織你的程式碼
名稱空間,是邏輯上的組織單元,透過名稱空間建立對程式碼的有機組織,是現代語言的一大“創舉”,《Java夜未眠》作者蔡學鏞說:一個語言是否適合大型開發,可以從它對模組、名稱空間(或類似概念)支援的良窳看出端倪。從這個意義上說,名稱空間並不是大型開發或者團隊開發最重要的核心概念,但卻是加分的必要因素。
關於.NET名稱空間的詳細內容,請參考7.3節“using的多重身份”。
6.切勿模式而模式
設計模式是好的,而濫用模式是不好的。
瞭解和熟悉設計模式,是需要實踐和思考的過程,模式並不是一切問題的靈丹妙藥,而且大多時候的濫用反而造成更多的問題。濫用模式體現在兩個方面:
· 不慎誤用,在不合適的場合應用不合適的模式,例如不是所有的場合都需要引入工廠解耦物件建立;對於依賴於執行狀態的場合,並非只有狀態模式一種選擇,工作流或許能帶來更好的控制。
· 過度應用,模式的引入都會或多或少地介入了中間層或者中間程式碼,過度的模式應用將導致程式碼複雜度的直線上升,除了會帶來效能上的問題還有邏輯上的混亂。
舉一個簡單的例子,策略模式是將演算法從宿主類中剝離出來,將易於變化的部分封裝為介面,例如:
public interface ITax
{
decimal Calculate(decimal value);
}
public class FoodTax : ITax
{
public decimal Calculate(decimal value)
{
return new decimal(1 + 0.15) * value;
}
}
public class RetailTax : ITax
{
public decimal Calculate(decimal value)
{
return new decimal(1 + 0.1) * value;
}
}
對於演算法分離而言,透過ITax策略可以很好地進行不同行業(例如飲食FoodTax或者零售RetailTax)稅率的計算,不同的行業提供不同的演算法策略,然而對於變化的稅率而言,這種實現的方式略顯過度,越來越多的演算法策略將造成程式碼的過度膨脹。所以完全可以對策略的方式進行改良,利用委託將稅率演算法分離看起來更加簡潔而優雅:
public interface ITax
{
decimal Calculate(Func
}
public class Tax : ITax
{
public decimal Calculate(Func
{
var rate = rateProvider.Invoke();
return rate * value;
}
}
一下子清爽了很多,避免了“策略”帶來過度膨脹,又很好地解決了稅率演算法的變化與分離,對於客戶端的消費並沒有太大的差別。
《倚天屠龍記》中有一個重要的片段,張三丰指點張無忌修煉太極,有一段“此時無招勝有招”的精彩論述,武術上真正的無敵不在乎一招一式的死記硬背,也不在於一刀一劍的激情揮灑。同樣的道理,似乎更適合用於軟體設計與模式,很多時候,架構與設計的極致不在於對模式的“應用”,而在於對模式的“活用”,在於靈魂附體,在於無招勝有招。
本文節選自《你必須知道的.NET(第2版)》一書
圖書詳細資訊:http://space.itpub.net/13164110/viewspace-704514
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-704684/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式碼壞味道之程式碼臃腫
- [譯] 程式碼中新增註釋之好壞醜
- 重構:改善既有程式碼的設計(第二版讀書筆記) - 重構、壞程式碼、寫好程式碼筆記
- 程式碼的壞味道「上」
- 22種程式碼的壞味道
- 程式碼審查:好事?壞事?
- 如何寫好程式碼?
- 如何寫好程式碼
- 好程式碼不值錢
- 碼農深耕 - 什麼樣的程式碼才是好程式碼?
- 什麼樣的程式碼才算是好程式碼
- 消除程式碼中的壞味道,編寫高質量程式碼
- 什麼樣的程式碼稱得上是好程式碼?
- 程式碼的印象派:寫點好程式碼吧
- 消滅 Java 程式碼的“壞味道”Java
- 優化程式碼中的“壞味道”優化
- 程式碼壞味道之非必要的
- 程式碼的壞味道和重構
- 21種程式碼的“壞味道” (轉)
- 好程式碼的定義
- 好程式設計師不寫程式碼程式設計師
- 幹掉你程式碼中的壞味道
- 如何寫好前端業務程式碼?前端
- 好的程式碼習慣 todo
- 何謂“好的程式碼”? (轉)
- 直播帶貨小程式原始碼是什麼?如何鑑別其質量好壞?原始碼
- 重構:幹掉有壞味道的程式碼
- 程式碼壞味道之濫用物件導向物件
- 程式碼的壞味道:可變的資料
- 怎麼消除JavaScript中的程式碼壞味道JavaScript
- webpack原始碼學習系列之二:code-splitting(程式碼切割)Web原始碼
- 好的程式碼可以自己說話!
- 好的程式碼很容易刪除!
- 好程式碼的科學定義
- 寫好程式碼十個祕訣
- 編寫程式碼的好習慣
- 好的程式碼風格積累
- 為什麼有人說無程式碼和低程式碼軟體行業破壞者?行業