《程序員修煉之道》系列 | 軟件中的正交性

在幾何學中,正交性的典型例子是座標軸。只改變橫軸的值,不會對縱軸值產生影響。 後來,正交性的影響逐漸延伸至軟件設計領域。

060.png

視頻地址戳這裏

比如,在設計良好的系統中,數據庫與用戶界面是正交的:改動界面,而不會影響數據庫,反之亦然。

Unix文化締造者道格拉斯·麥克羅伊(Malcolm Douglas McIlroy)曾總結的Unix哲學:“只做一件事,把它做好”,很多人以爲只是在強調簡單性,殊不知這其中也暗含了對正交性的強調。

軟件中的正交性

隨着軟件功能增多,軟件裏的模塊會變得越來越複雜,隨時會變成一匹脫繮的野馬,不受程序員的掌控,這時候就需要把軟件系統的模塊進行拆分。

而正交性就是模塊拆分需要遵循的原則,意味着更改一個組件,另一個組件不會受到影響(比如多米諾骨牌)。這樣逐漸複雜的系統纔會變得相對有條理,方便後期的管理與維護。

如何遵循正交原則?

一旦涉及模塊拆分,首先要解決的問題就是如何分,如何合。

(如何分)

當劃分模塊時,要讓每個模塊簡單明瞭(高內聚),模塊間不要有很強的關係。具體可依照以下兩個原則:

1、消除重複

重複的代碼,其實都在表達同一項功能需求。如果需求發生變化,這些分佈在不同模塊中的重複代碼,統統都要修改,增加了維護成本。

有關 Don't Repeat Yourself 原則的內容可查看我們的往期視頻,其實正交性原則與 DRY 原則緊密相關,運用DRY原則,可使系統中的重複降至最小;運用正交性原則,可減少系統組件間的相互依賴。

2、按需求分類

圖書館中,書籍會分有哲學、社會科學等不同區域。同理,在軟件模塊中,不同的小模塊也有不同的職責,應儘量把這些關聯緊密的部分放在此模塊中,減少與其他模塊的連接。

(如何合)

當模塊通過接口相連時,需要讓模塊間儘可能不要相互影響。

比如樂高的A模型跟臨近模型只通過底部相連,拿掉A不會影響其他模型。而B模型依賴於兩邊的模型,拿掉B後,組接的成本就會高一些。

同理,在軟件設計中,模塊間應儘量減少依賴,接口儘可能簡單。

正交原則如何應用於實際工作中?

除了代碼設計,正交原則大多可用於以下幾個方面。

·用在編碼中

編寫代碼的過程中,有很多方法可以維持正交性。

比如說編寫“害羞”的代碼,它們不會向其他模塊暴露任何問題,彼此獨立不干擾。

·用在項目團隊中

具有正交性的項目團隊,通常分工明確,效率最高。每個人都知道自己要做什麼,並全力做出貢獻。

如何檢驗一個團隊是否具有正交性?

可觀察項目中每個變動會涉及的人數,涉及人數越多,團隊的正交性就越差。而正交性差會導致團隊組織重疊,各成員的責任不明確,每次改動可能會讓團隊中的任一成員都會受到影響。

Kent Beck 曾提出一個精煉的原則:局部化影響。任何一個變化,對當前的軟件設計影響範圍都可以控制在一個儘量小的局部。當然這是所有軟件從業者的理想狀態,不妨就儘量去做吧。

《程序員修煉之道》系列更多視頻可戳:《程序員修煉之道》系列視頻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章