朋友指著自己寫的代碼問:你看我的代碼寫的怎麼樣,有沒有問題,哪裡需要修改? 以最寬鬆的標準講,只要代碼沒有邏輯錯誤,沒有嚴重性能問題,就沒有問題,但我知道,他問得不是這些,而是問代碼有沒有可以更進一步優化的可能,我看他的代碼做了清晰的分層,提取了基類,使用了模板模式,總體上算是不錯了。 問題來了,究 ...
朋友指著自己寫的代碼問:你看我的代碼寫的怎麼樣,有沒有問題,哪裡需要修改?
以最寬鬆的標準講,只要代碼沒有邏輯錯誤,沒有嚴重性能問題,就沒有問題,但我知道,他問得不是這些,而是問代碼有沒有可以更進一步優化的可能,我看他的代碼做了清晰的分層,提取了基類,使用了模板模式,總體上算是不錯了。
問題來了,究竟什麼樣的代碼算得上是好代碼呢?
面對這個問題,可能大多數程式員首先想到的是:高內聚,低耦合,高效率,已維護,易擴展。這些是對的,但這隻能算是正確的廢話,因為對大部分IT從業者(尤其是剛入行,缺乏足夠知識和經驗的新人)來說,並不能通過一個具體的標準去衡量。
拋開框架和具體技術細節,單純從編碼的角度講,依我的觀點:
面向對象編程,考察的是抽象化的能力。
第一層級的抽象是類。
從實際業務需求入手,將現實世界中的事物,抽象成類,通過類,對象之間的相互調用,完成業務需求,這是面向對象編程最基礎的抽象的能力。
第二層級的抽象是基類。
發現類之間的共性,提取基類,抽象類,基類負責處理共性的邏輯,子類負責處理個性的邏輯,從而實現代碼的復用,邏輯更清晰,代碼更易於維護。
再高一層級的抽象是介面。
介面僅僅定義了一組規範標準,而不包含任何實現邏輯,因此,介面比抽象類的適用範圍更廣。面向對象開發原則中的“依賴倒置原則”,簡單來說,就是要面向介面編程。
更高一層級的抽象是泛型。
為什麼將泛型放到比基類和介面更高一層級,因為基類和介面,都只是對其繼承者的單一類型的抽象,而泛型,是對多個相互協作類型的抽象,泛型不僅僅是對類型的抽象,還抽象出了多個類型間相互協作行為,正確的使用泛型,能夠讓代碼變得更精煉,邏輯更嚴謹規範。
好了,以上四個層級,也是簡單的給代碼劃分等級,看看自己寫的代碼,現在處於哪一個層級呢。
後記
當然,並非所有的代碼都需要提取基類,定義介面,凡事都有一個適用範圍。
以上關於抽象化的觀點,算是自己多年從事軟體開發的一點小小的感悟,希望對你有一定幫助。
更為大家廣泛接受的,區分好代碼的標準,可以參考“面向對象開發原則”,因為有太多文章寫這方面的內容,這裡不做展開,有興趣的朋友可以自行搜索。