淺談物件導向SOLID 原則對工程師的好處與如何影響能力

文章推薦指數: 80 %
投票人數:10人

SOLID 原則其實是物件導向「設計層面」的思維與定律。

大學時期程式設計課程中所學的物件導向,其實只是在介紹程式語言有提供物件導向的哪些特性,卻從未 ... 3 淺談物件導向SOLID原則對工程師的好處與如何影響能力 物件導向 solid 自學程式設計 solid原則 WadeHuang 2019-10-2212:16:12‧1607瀏覽 前言 為了感謝部落格一直以來都有人在閱讀,讓我一直有經營下去的動力。

所以想寫一個系列學習SOLID原則2年後的心得文章。

這心得文章包含自己使用SOLID兩年的總結,並且以自己的理解簡化SOLID原則,希望幫助新手工程師縮短「SOLID原則是文字天書」的時間。

從第一次接觸物件導向SOLID原則至今已經兩年了,一開始覺得「SOLID原則是文字天書」,到現在Coding時常融入SOLID的思想來「設計」程式。

所以SOLID原則到底是什麼? 》SOLID原則其實是物件導向「設計層面」的思維與定律。

大學時期程式設計課程中所學的物件導向,其實只是在介紹程式語言有提供物件導向的哪些特性,卻從未有人教導如何透過物件導向的特性撰寫程式碼,甚至沒人告訴你為什麼要用物件導向開發程式。

然而SOLID原則就是物件導向開發的指導方針,若以多個角度來看這些原則,會發現SOLID已經指出物件導向的優點以及程序式程式碼隱晦的缺點。

但這不代表物件導向沒有缺點,要是沒有妥善運用SOLID原則的話,物件導向對專案的傷害絕對不比程序式程式碼低!但這留給後續的文章來解釋,首先來看看SOLID的好處與重要性。

SOLID原則對專案的好處? SOLID原則對專案的影響很大,當專案一點一滴的導入SOLID原則的程式碼,不少複雜的程式碼慢慢被簡化,被簡化的程式碼可以降低複雜度,讀懂程式碼的時間從原本需要花20分鐘閱讀,到只需要花費2分鐘閱讀。

縮短閱讀時間對專案來說是一件好事,一般來說工程師「閱讀程式碼」的時間常常大於「新增/修改程式碼」的時間,畢竟要先讀懂才能動手嘛,因此縮短閱讀程式碼時間等於**縮短「新增/修改程式碼」**程式碼的時間。

優點:降低程式碼複雜度=>縮短閱讀程式碼的時間=>減少維護專案程式碼的時間 你可能會覺得,為什麼SOLID原則可以降低程式碼的複雜度? 因為物件導向本身的目的就是管理「程式碼複雜度」,這也是為什麼這麼多人推崇使用物件導向開發的原因,然而SOLID原則是教導工程師應該如何透過物件導向的特性來管理程式碼的複雜度。

SOLID原則對工程師的好處? 由上述可知SOLID原則可以降低程式碼的複雜度,這是第一個好處,因為降低工程師開發過程的痛苦值!(應該沒人想一直面對醜陋複雜的程式碼) 再來的好處可多的呢!為什麼這麼說呢? SOLID原則是踏入資深工程師階段的必學觀念。

大部分軟體開發的進階觀念,都建構在良好的物件導向程式碼之上。

要是沒辦法妥善運用物件導向,就沒辦法運用軟體開發的進階觀念/技巧。

》這相當重要,若工程師沒有能力學習進階觀念,很可能就會一直停留在碼農階段。

但是學會SOLID原則之後呢? 以下列出SOLID未來的應用,下列被提及的每個議題都是進階物件導向重要的基石,很值得花時間投資: 1.單元測試 用程式碼撰寫測試程式,取代手動測試。

替專案提供回歸測試,時時刻刻執行單元測試,檢查有沒有人改壞程式碼。

符合SOLID原則的程式碼可以輕易導入單元測試。

2.重構 在不改變程式碼外部行為的前提下,修改程式碼內部的結構,提升可讀性與擴充性。

重構必然會搭配測試,避免改壞程式碼。

低階重構:把爛Code重構成符合物件導向SOLID原則(敏捷開發)。

中階重構:把SOLID重構成設計模式(敏捷開發)。

高階重構:把SOLID重構成軟體架構(敏捷開發)。

3.設計模式 進階物件導向應用 學習物件與物件之間常見的組合模式。

用來管理程式碼的複雜度,或解決開發系統中的各種常見問題。

學過設計模式,在寫程式或閱讀程式的時候,會用更高一層的視角去思考。

最後會培養出根深蒂固的抽象觀念。

》但這些議題卻又基於SOLID原則之上 因為SOLID原則幫助專案建立一個乾淨、穩定、良好的物件導向程式碼,讓這些物件導向程式碼可以引入更進階的概念/技巧。

這裏引用UncleBob在物件導向原則、設計模式與C#實踐這本書說過的話: 我的書裡所教的觀念與技巧,都只對乾淨的Code有效益。

如果你的程式碼還很雜亂,請先學會怎麼整理程式碼。

-UncleBob(現代軟體界大神) 然而這本書也是SOLID的原點。

軟體開發的觀念幾乎就圍繞在上述幾個議題在發展,因此有沒有學會上述議題,基本上就是碼農跟中高階工程師的分水嶺。

如果持續努力學習這些議題,馬上就能凸顯跟大部分工程師的差異性,面試時可以談的條件也會變多。

我自己的學習路線如下: SOLID>重構+單元測試>設計模式>測試驅動開發(TDD)>行為驅動開發(BDD)>領域驅動開發(DDD) 但是真實的學習過程其實經常交叉學習,不一定是先學完前者才往下學習下一個。

因為這些議題都是環環相扣,常常可以在後面的議題學習到前面議題的進階用法。

結尾: 以往學習SOLID原則時,大部分文章都專注在每個原則的介紹與範例,卻幾乎沒人提及SOLID原則與物件導向之間的關係,以及SOLID原則日後的發展為何? 因此我想在講解SOLID每個原則之前,先花篇幅琢磨在兩個問題上。

希望也能替其他人解開疑問。

接下來也將會陸續推出講解SOLID每個原則的文章出現,沒意外的話下次PO文是探討單一職責原則。

此文章也會同步到:我的部落格 系列文章 淺談物件導向SOLID原則對工程師的好處與如何影響能力 再談SOLID原則,WhySOLID? 物件導向設計原則:單一職責原則,定義、解析與實踐 物件導向設計原則:開放封閉原則,定義、解析與實踐 留言 追蹤 檢舉 尚未有邦友留言 立即登入留言 相關文章 中鳥階段-學習物件導向的精神。

再談SOLID原則,WhySOLID? 沒程式基礎也能懂~淺談物件導向與SOLID原則 中場回顧 單一功能原則SingleResponsibilityPrinciple 開放封閉原則Open-ClosedPrinciple 依賴反轉原則DependencyInversionPrinciple 里氏替換原則LiskovSubstitutionPrinciple 介面隔離原則InterfaceSegregationPrinciples 回顧SOLID設計原則 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20459篇 完賽人數 572人 鐵人賽最新文章 C#入门之正则表达式匹配并替换 [Bonus系列]-來看看ReactRouterv6有什麼新功能?和v5有哪些地方不同? 2021-11-24盤勢分析 做不好資金控管,一檔大賠,獲利全吐 DevFest'21Hsinchu&Taichung議程錄影上線啦! 建立第一個單元測試(golang)-2(Day21) 更新網格交易機器人 STM32的開發生態,Cube、HAL庫、LL庫 閒聊STM32CubeMX和STM32CubeIDE 建立第一個單元測試(golang)-1(Day20) 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 一台電腦可否同時安裝Win7和Win10作業系統嗎? 請提供台灣的資料庫社群、論壇、社團、技術交流 訂便當系統的table規劃設計討論 DELLServerRAID設定問題 響應式網頁漢堡選單打不開 Windows10裝在虛擬機上,微軟授權該怎麼買較划算 員工電腦採購的選擇桌電vs筆電 fortigate60E設定問題 IT鐵人賽自我挑戰組完賽獎狀...? 中華電信後面路由器的IPV6 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 訂便當系統的table規劃設計討論 員工電腦採購的選擇桌電vs筆電 除了PHP還有什麼方法可以連API取資料(API有驗證) 關於boolean預設值及while迴圈問題 一台電腦可否同時安裝Win7和Win10作業系統嗎? Outlook2007寄件備份是空的 fortigate60E設定問題 IOS不能正常顯示CheckBox 詢問IpsecLanToLanToLan的問題(文長) 跳轉的時候postjson資料 熱門文章 做不好資金控管,一檔大賠,獲利全吐 [Bonus系列]-來看看ReactRouterv6有什麼新功能?和v5有哪些地方不同? 夜間模式真的對眼睛比較好嗎?詳細整理(上) 【必學】iPhone照片輕鬆轉移到另一支iPhone/iPad 2021-11-24盤勢分析 HTML筆記(01)-前端、後端和全端 【徵才】駐東南亞軟體工程師 快速用SpringBoot2建立第一個APIService 【C#群益API開發教學】官方範例下載與安裝環境#CH1 TorquePro(OBD2&Car)APKforAndroid 一週點數排行 更多點數排行 海綿寶寶(antijava) ㊣浩瀚星空㊣(yoching) raytracy(raytracy) ccenjor(ccenjor) japhenchen(japhenchen) mytiny(mytiny) by2048(by2048) 一級屠豬士(hitomitanaka) juck30808(juck30808) fillano(fillano) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?