軟體設計上,低耦合是什麼意思? 為什麼要鬆散耦合?

2023年6月2日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

在軟體設計上常聽人說「低耦合」,是什麼意思? 甚至 Netflix 把這個概念帶到組織管理,在 Netflix 企業文化中有一條「認同一致,鬆散耦合 (highly aligned, loosely coupled)」,為什麼要這樣? 讓我們逐一說明。

什麼是耦合?

要懂解耦前,要先知道什麼是耦合。耦合的英文是 coupling (動詞是 couple)。很多軟體工程師很愛晶晶體,所以聽到他們在講 couple 時,不要以為是在講誰跟誰是伴侶或夫妻,因為工程師在講 couple,多半是在講耦合。

雖然上面這樣講,但事實上,耦合跟伴侶是很類似的意思。所謂的耦合是指兩段程式碼 (或兩個模組) 相互有關係,就像伴侶一樣,耦合性越高就黏得越緊。但是黏得緊,就會讓程式模組比較難被重複使用。

就像以前很多人會抱怨 iPhone 的充電線必須用 Lightning 插頭,所以假如出去忘了但充電線,身邊的人又只有 Type C 的插頭,那就沒辦法用。反之,安卓手機都用 Type C 充電線,所以假如你用三星手機,出門忘了帶充電線,身旁有個用 Sony 手機的人有帶 Type C 充電線,你可以直接用。

上面這個對比可以看到,蘋果手機跟充電線的耦合性高,導致要用只能搭配用,沒辦法被重複用別家的充電線;安卓手機耦合性低,所以不管你用哪牌的手機,充電線都可以重複用。除此之外,耦合性太高的問題在於,會牽一髮動全身。可能改一個地方,結果發現其他地方受影響,也必須跟著改,這樣成本就會比較大。

在軟體設計上,我們會希望模組能被重複使用,不要有牽一髮動全身的狀況,這樣能讓程式碼比較好維護,也比較容易擴張。這也是為什麼大原則是會追求低耦合 (當然還是很看情況,有些情況耦合性高一點也有好處,但這邊先不細談)。

什麼是解耦? 為什麼 Netflix 要鬆散耦合?

了解耦合後,接著說解耦。解耦的英文是 decoupling,顧名思義就是把耦合在一起的東西拆開。你可能很常會聽到工程師說,把某塊模組「抽出來」,這其實就是解耦的體現。當你把模組抽成可以重複用的,就能避免上述提到耦合性導致的問題。

上面提到,Netflix 的組織文化中有「鬆散耦合」這個概念。大概因為 Netflix 的共同創辦人 Reed Hastings 是史丹佛電腦科學碩士這種硬底子,所以才把軟體設計的概念,搬到組織管理上。而事實證明,這概念搬到組織管理也一樣很有幫助。

在大型組織中,很常也會有牽一髮動全身的狀況。以我自己的經驗來說,之前做過專案是人在亞洲的我,要跟美國、歐洲區的其他兩個組合作,這種情況真的很崩潰,不僅是因為要配合時區開會,而且在實作上遇到問題,問美國同事,他們已經下班了,所以要等對方隔天上班,而他們隔天上班後,可能要再問他們那邊相關的人,然後才能回覆我們這。󠀠

就變成我們問 A 組,A 組要去跟 B 組確認,B 組可能要再跟 C 組討論,有了結論後再回給 B 組,然後 B 組回覆 A 組後,A 組才能回覆我們。大公司之所以動得很慢不是沒原因的,討論個東西這麼多關卡,怎麼快的起來? 這些不同組在決策上要依賴彼此,就是耦合性太高的表徵。這是為什麼 Netflix 提出鬆散耦合,正是為了避免這種狀況。

假如是在鬆散耦合的組織下,就不會有這種問題。在亞洲區的我們,做的決定不需要等其他區的組回覆後才能定奪。那你可能會問,不跟其他組確認,那要是做的東西合不在一起怎麼辦? 這就是為什麼 Netflix 不只講鬆散耦合,還講「認同一致」。假如有一致的方向,就能夠避免不同組的決策彼此衝突。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們