官术网_书友最值得收藏!

2.3.1 好代碼的特性

好代碼具有以下特性[1]

1. 魯棒(Solid and Robust)

代碼不僅要被正確執行,我們還要考慮對各種錯誤情況的處理,比如各種系統調用和函數調用的異常情況,系統相關組件的異常和錯誤。

對很多產品級的程序來說,異常和錯誤處理的邏輯占了很大比例。

2. 高效(Fast)

程序的運行應使用盡量少的資源。資源不僅僅包括CPU,還可能包括存儲、I/O等。

設計高效的程序,會運用到數據結構和算法方面的知識,同時要考慮到程序運行時的各種約束條件。

3. 簡潔(Maintainable and Simple)

代碼的邏輯要盡量簡明易懂,代碼要具有很好的可維護性。對于同樣的目標,能夠使用簡單清楚的方法達成,就不要使用復雜晦澀的方法。

“大道至簡”,能否把復雜的問題用簡單的方式實現出來,這是一種編程水平的體現。

4. 簡短(Small)

在某種意義上,代碼的復雜度和維護成本是和代碼的規模直接相關的。在實現同樣功能的時候,要盡量將代碼寫得簡短一些。

簡潔高于簡短。這里要注意,某些人為了能把代碼寫得簡短,使用了一些晦澀難懂的描述方式,降低了代碼的可讀性。這種方式是不可取的。

5. 可測試(Testable)

代碼的正確性要通過測試來保證,尤其是在敏捷的場景下,更需要依賴可自動回歸執行的測試用例。

在代碼的設計中,要考慮如何使代碼可測、易測。一個比較好的實踐是使用TDD(Test-Driven Development,測試驅動開發)的方法,這樣在編寫測試用例的時候會很快發現代碼在可測試性方面的問題。

6. 共享(Re-Usable)

大量的程序實際上都使用了類似的框架或邏輯。由于目前開源代碼的大量普及,很多功能并不需要重復開發,只進行引用和使用即可。

在一個組織內部,應鼓勵共享和重用代碼,這樣可以有效降低代碼研發的成本,并提升代碼的質量。

實現代碼的共享,不僅需要在意識方面提升,還需要具有相關的能力(如編寫獨立、高質量的代碼庫)及相關基礎設施的支持(如代碼搜索、代碼引用機制)。

7. 可移植(Portable)

某些程序需要在多種操作系統下運行,在這種情況下,代碼的可移植性成為一種必需的能力。

要讓代碼具有可移植性,需要對所運行的各種操作系統底層有充分的理解和統一抽象。一般會使用一個適配層來屏蔽操作系統底層的差異。

一些編程語言也提供了多操作系統的可移植性,如很多基于Python語言、Java語言、Go語言編寫的程序,都可以跨平臺運行。

8. 可觀測(Observable) / 可監控(Monitorable)

面對目前大量存在的在線服務(Online Service)程序,需要具備對程序的運行狀態進行細致而持續監控的能力。

這要求在程序設計時就提供相關的機制,包括程序狀態的收集、保存和對外輸出。

9. 可運維(Operational)

可運維已經成為軟件研發活動的重要組成部分,可運維重點關注成本、效率穩定性三個方面。

程序的可運維性和程序的設計、編寫緊密相關,如果在程序設計階段就沒有考慮可運維性,那么程序運行的運維目標則難以達成。

10. 可擴展(Scalable and Extensible)

可擴展包含“容量可擴展”(Scalable)和“功能可擴展”(Extensible)兩方面。

在互聯網公司的系統設計中,“容量可擴展”是重要的設計目標之一。系統要盡量支持通過增加資源來實現容量的線性提高。

快速響應需求的變化,是互聯網公司的另外一個重要挑戰。可考慮使用插件式的程序設計方式[2],以容納未來可能新增的功能,也可考慮使用類似Protocol Buffer[3]這樣的工具,支持對協議新增字段。

以上十條標準,如果要記住,可能有些困難。我們可以把它們歸納為四個方面,見表2.1。

表2.1 對一流代碼特性的匯總分類

主站蜘蛛池模板: 科技| 巴楚县| 大渡口区| 屯留县| 天峨县| 西平县| 扶风县| 长阳| 衡南县| 镇平县| 德格县| 祁连县| 天祝| 湟源县| 宣威市| 沙田区| 罗江县| 九龙县| 七台河市| 靖远县| 赤城县| 福贡县| 贞丰县| 江都市| 左贡县| 嘉禾县| 常山县| 敦煌市| 金门县| 台江县| 张家川| 淳化县| 焉耆| 日照市| 桓台县| 旬阳县| 文成县| 广元市| 忻城县| 桂阳县| 马关县|