邁向資深工程師系列

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

2023年6月2日

在軟體設計上常聽人說「低耦合」,是什麼意思? 甚至 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 不只講鬆散耦合,還講「認同一致」。假如有一致的方向,就能夠避免不同組的決策彼此衝突。

👇 以下為廣告贊助