結構優美的代碼,是每個程式員的追求。可能這個沒有嚴格的標準,但是有些原則會有助編寫結構優美的代碼。
1.對代碼的邏輯層次要有感覺。
比如大體上,一個程式會分三個層次:介面層,邏輯層,資料層。簡化後一般也有兩個層次:介面和邏輯層。
邏輯層是去掉外表的,內在的,實質的東西。一般來說,就是表現為對資料的一組操作。
而介面層,是關注程式應該如何和使用者溝通的。比如可視的視窗,圖表,控制項等。它是內部邏輯的呈現,也是使用者和內部邏輯溝通的橋樑。
區分這兩個層次的好處,一個是這兩個層次所注重的核心內容有所不同,用到的技巧或者指導方法有所差別。第二點是,可以將問題解構和局部化,減輕開發難度。第三點,有助分開來修改內容,比如介面層挪動一下,改變一下形式,並不需要修改邏輯層的;而邏輯層改進一下演算法,也不會影響介面層的代碼。
對代碼的邏輯層次有感覺,以上的要求只是很基本的,編寫代碼要時時刻刻對當前代碼所代表的邏輯層次要有“感覺”,要能意識到這段代碼和上一段代碼是否在某種標準下,處在同一個層次。比較經典的範例如:互連網的7層協議,還有作業系統的層次分部等。編寫代碼要善于歸納這些層次,才能建構一個優美的結構。
2.善於抽取演算法代碼
一般編寫代碼,會有兩種明顯的不同的思維形式,一種是圍繞業務內容的,一種是脫離業務內容,獨立存在的,一般表現為演算法內容。 在實際開發中,一般很少會用到(正式的)演算法,但是總是會有一些地方會用到演算法。當演算法和商務邏輯糾結在一起的時候,會導致商務邏輯不清晰,因為演算法大多數情況往往都是難以閱讀理解的數學公式。將演算法抽取出來,無疑有助商務邏輯的清晰化,同時抽取的演算法代碼,又能成為你的代碼積累,就算換了新的業務也能派上用場,何樂而不為。
3.提取工具代碼
日常開發中,工具代碼比重不少。何為工具代碼,非軟體邏輯核心的,卻有助於軟體開發過程實施的代碼。工具代碼大部分由架構和第三方程式庫提供,但也往往需要開發針對性的部分,這一部分將成為代碼積累的重要組成部分。
4.抽象技巧
抽象是重要的技巧,一般來說越高的抽象,能適用的問題就越廣,也就越有(潛在的)使用價值。一般應該盡量使用高抽象的代碼來編程,少使用具體的代碼來編碼。但是抽象和具體總要在某個點上縫合起來,這個點的選擇應該三思。