史無前例的設計模式-評判代碼質量好壞的標準

一、評判代碼質量好壞的標準

靈活性(flexibility)、可擴展性(extensibility)、可維護性(maintainability)、可讀性(readability)、可理解性(understandability)、易修改性(changeability)、可複用(reusability)、可測試性(testability)、模塊化(modularity)、高內聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high performance)、安全性(security)、兼容性(compatibility)、易用性(usability)、整潔(clean)、清晰(clarity)、簡單(simple)、直接(straightforward)、少即是多(less code is more)、文檔詳盡(well-documented)、分層清晰(well-layered)、正確性(correctness、bug free)、健壯性(robustness)、魯棒性(robustness)、可用性(reliability)、可伸縮性(scalability)、穩定性(stability)、優雅(elegant)、好(good)、壞(bad)……

二、常用的幾個

  • 可維護性(maintainability)
  • 可讀性(readability)
  • 可擴展性(extensibility)
  • 靈活性(flexibility)
  • 簡潔性(simplicity)
  • 可複用性(reusability)
  • 可測試性(testability)

三、逐個分析

1、可維護性(maintainability)

1.1、描述

維護性就是修改bug以及完成正常產品需求的迭代所產生的新老代碼。
可維護性就是說在不破壞原有代碼設計、不引入新的bug的情況下能夠順利的完成產品迭代需求或者修改老的代碼所產生的bug。
不可維護性就是說在修改老代碼(bug)或完成新迭代需求所產生的代碼都可能極大的概率引入新的bug,並需要花費很長時間才能完成,這就是不可維護性。

1.2、是否具備可維護性

若bug容易被修復,修改或新增功能能夠輕鬆完成,那就可以認爲這段代碼是具備可維護性的。相反,若修改一個bug,或者修改、新增一個功能都可能引入其他意料之外的bug,這就說明這段代碼是具備不可維護性的。

2、可讀性(readability)

2.1、描述

顧名思義,別人看你這段代碼或者做review的時候,在沒有你任何提示的情況下別人能不能看懂你寫的代碼,大到代碼邏輯小到變量名稱命名。

2.2、是否具備可讀性

如何確認是否具備可讀性?
需要看代碼是否符合編碼規範、比如複雜邏輯是否有註釋、log、是否能見名知意、模塊劃分是否合理、是否高內聚低耦合等。
如果其他人能輕鬆的讀懂你寫的代碼,那就說明你的代碼可讀性好。反正其他人讀不下去,讀的過程中有很多疑問,那就說明你的代碼不具備可讀性。

3、可擴展性(extensibility)

3.1、描述

在不修改或少量修改原有代碼的情況下能通過擴展的方式(比如新增個子類實現接口而不是修改老的實現類的方式)來完成某些需求。就是說代碼預留了一些功能擴展點,而需求改動的時候不用大動干戈。對應了對修改關閉,對擴展開放設計原則。

4、靈活性(flexibility)

4.1、描述

和擴展性很像,設計模式、設計原則都是爲了解決問題而產生。大多數都挺像的但是略有不同。

  • 在不修改或少量修改原有代碼的情況下能通過擴展的方式來完成某些需求不僅可以說具備可擴展性,還具備靈活性。
  • 當要開發一個新功能的時候,發現原有代碼中已經抽象出很多可以服用的模塊、類等代碼,可以拿來直接用。這個時候不僅可以說具備複用性,還可以說代碼很靈活。
  • 當我們使用某組接口的時候,如果這組接口可以應對各種場景,滿足各種需求。這時候也叫靈活。

5、簡潔性(simplicity)

5.1、描述

對應設計原則KISS原則:Keep It Simple, Stupid。儘量讓代碼簡單、邏輯清晰,大牛往往都是利用簡單的代碼完成複雜的需求。而不是一堆設計模式上來過度設計。

6、可複用性(reusability)

6.1、描述

儘量減少重複代碼的編寫,複用已有的代碼。對應DRY(Don’t Repeat Yourself)設計原則。

7、可測試性(testability)

7.1、描述

代碼的可測試性差,比較難寫單元測試,那基本上就能說明代碼設計得有問題。

四、如何寫出好代碼?

寫完後覈對下是否符合如下幾個特徵:

  • 可維護性(maintainability)
  • 可讀性(readability)
  • 可擴展性(extensibility)
  • 靈活性(flexibility)
  • 簡潔性(simplicity)
  • 可複用性(reusability)
  • 可測試性(testability)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章