程序員修煉之道系列 | 正交性:如何破解项目牵一发而动全身?
原創-
發表時間 2021-05-19
-
閱讀數 3090
-
最后编辑:琦琦 于 2025-05-23 15:42:22
在几何学中,正交性的典型例子是坐标轴。只改变横轴的值,不会对纵轴值产生影响。 后来,正交性的影响逐渐延伸至软件设计领域。
比如,在設計良好的系統中,數據庫與用戶界面是正交的:改動界面,而不會影響數據庫,反之亦然。
Unix文化缔造者道格拉斯·麦克罗伊(Malcolm Douglas McIlroy)曾总结的Unix哲学:“只做一件事,把它做好”,很多人以为只是在强调简单性,殊不知这其中也暗含了对正交性的强调。
軟件中的正交性
隨著軟件功能增多,軟件裏的模塊會變得越來越複雜,隨時會變成一匹脫缰的野馬,不受程序員的掌控,這時候就需要把軟件系統的模塊進行拆分。
而正交性就是模塊拆分需要遵循的原則,意味著更改一個組件,另一個組件不會受到影響(比如多米諾骨牌)。這樣逐漸複雜的系統才會變得相對有條理,方便後期的管理與維護。
如何遵循正交原則?
一旦涉及模塊拆分,首先要解決的問題就是如何分,如何合。
(如何分)
當劃分模塊時,要讓每個模塊簡單明了(高內聚),模塊間不要有很強的關系。具體可依照以下兩個原則:
1、消除重複
重複的代碼,其實都在表達同一項功能需求。如果需求發生變化,這些分布在不同模塊中的重複代碼,統統都要修改,增加了維護成本。
有关 Don't Repeat Yourself 原则的内容可查看我们的往期視頻,其实正交性原则与 DRY 原则紧密相关,运用DRY原则,可使系统中的重复降至最小;运用正交性原则,可减少系统组件间的相互依赖。
2、按需求分類
圖書館中,書籍會分有哲學、社會科學等不同區域。同理,在軟件模塊中,不同的小模塊也有不同的職責,應盡量把這些關聯緊密的部分放在此模塊中,減少與其他模塊的連接。
(如何合)
當模塊通過接口相連時,需要讓模塊間盡可能不要相互影響。
比如樂高的A模型跟臨近模型只通過底部相連,拿掉A不會影響其他模型。而B模型依賴于兩邊的模型,拿掉B後,組接的成本就會高一些。
同理,在軟件設計中,模塊間應盡量減少依賴,接口盡可能簡單。
正交原則如何應用于實際工作中?
除了代碼設計,正交原則大多可用于以下幾個方面。
·用在編碼中
編寫代碼的過程中,有很多方法可以維持正交性。
比如說編寫“害羞”的代碼,它們不會向其他模塊暴露任何問題,彼此獨立不幹擾。
·用在項目團隊中
具有正交性的項目團隊,通常分工明確,效率最高。每個人都知道自己要做什麽,並全力做出貢獻。
如何檢驗一個團隊是否具有正交性?
可觀察項目中每個變動會涉及的人數,涉及人數越多,團隊的正交性就越差。而正交性差會導致團隊組織重疊,各成員的責任不明確,每次改動可能會讓團隊中的任一成員都會受到影響。
Kent Beck 曾提出一个精炼的原则:局部化影响。任何一个变化,对当前的软件设计影响范围都可以控制在一个尽量小的局部。当然这是所有软件从业者的理想状态,不妨就尽量去做吧。
-
禅道産品
禅道開源版 禅道企業版 禅道旗艦版 禅道IPD版 -
核心功能
産品管理 項目管理 質量管理 效能管理 -
使用文檔
基本版手冊 企業版手冊 旗艦版手冊 IPD版手冊 開發中心手冊 -
幫助中心
积分問答 常見問題 論壇交流 使用視頻 Gitee GitHub -
關于我們
關于我們 禅道軟件 最新動態 禅道活動 -
禅道社區
禅道博客 積分排行 積分商城 禅道書院 -
聯系方式
聯系人:劉斌 電話:17685869372 微信:17685869372 Q Q:526288068北京、上海、深圳分部