高內聚是有極限的. 當**在乙個維度上高度內聚的時候, 在其它維度上是發散的. -- **內聚設計的不確定性原理
大家都知道量子力學的不確定性原理: 在微觀世界裡, 有幾對物理量不能同時精確的測定, 包括速度與位置, 以及能量與時間. 比如當我們精確的測定乙個粒子的速度使其誤差很小的時候, 我們對其位置的測量誤差從0到正無窮都有可能, 換句話說, 此時粒子可能位於宇宙的任何地方, 這裡的極限就是二者誤差的乘積總是大於乙個被稱為蒲朗克常數的數.
**的設計有時會感到同樣的張力: 無法做到完全的內聚. 當**在乙個維度上高度內聚的時候, 在其它維度上是發散的或耦合的. 無論是邏輯設計還是物理設計.
當**在結構上內聚的時候, 在行為上是發散的. 主流的物件導向程式設計正規化是按照結構優化的, 看一下你的**中的class的名字, 大都是名詞, 是乙個事物, 表達了what the system is. 但這個系統具有什麼樣的行為, 能做什麼事, what the system does, 卻被切片, 分散到系統的各個角落. 我們或許能說出系統的靜態結構是什麼樣子, 卻要花費更多的精力才能搞清楚系統做了什麼, 能做什麼, 結構間的互動是什麼樣子.
面向過程的程式設計正規化是按照行為優化的. 過程的名字通常是動詞, 表達了 what the system does. 系統的靜態結構則被掩藏在了行為之後
dci有助於解決**邏輯設計的內聚問題.
當我們按照feature來劃分目錄結構的時候, 相同的技術架構層次的**會被分到不同的目錄中. 比如資料訪問層的**會分散到各個feature的目錄中.
當我們按照技術層次架構來劃分目錄的時候, 同乙個feature的**會被分到不同目錄中, 而同乙個目錄中會包含多個feature的**. 比如流行的mvc框架的預設目錄結構都是所有的controller放在一起, 所有的model放在一起等等. 當我需要看乙個feature的完整實現時, 需要從不同目錄中挑出不同檔案來檢視.
現在的程式語言是基於文字的, 或者其實也是基於檔案系統的. 檔案系統是一棵樹, 每個葉子節點只能隸屬於乙個父節點, 樹的結構只能按照乙個維度優化. 語言本身的元資料也不夠豐富. 這些都限制了能夠生成各種檢視的ide的出現
這應該只是約束理論的乙個例項.
內聚的極限 軟體開發的不確定性原理
高內聚是有極限的.當 在乙個維度上高度內聚的時候,在其它維度上是發散的.內聚設計的不確定性原理 大家都知道量子力學的不確定性原理 在微觀世界裡,有幾對物理量不能同時精確的測定,包括速度與位置,以及能量與時間.比如當我們精確的測定乙個粒子的速度使其誤差很小的時候,我們對其位置的測量誤差從0到正無窮都有...
內聚的極限 軟體開發的不確定性原理
高內聚是有極限的.當 在乙個維度上高度內聚的時候,在其它維度上是發散的.內聚設計的不確定性原理 大家都知道量子力學的不確定性原理 在微觀世界裡,有幾對物理量不能同時精確的測定,包括速度與位置,以及能量與時間.比如當我們精確的測定乙個粒子的速度使其誤差很小的時候,我們對其位置的測量誤差從0到正無窮都有...
如何理解實踐標準是確定性和不確定性的統一
如何理解實踐標準是確定性和不確定性的統一 實踐標準是確定性與不確定性 絕對性和相對性的統一。確定性和絕對性 只有實踐才是檢驗認識真理性的唯一標準 實踐最終一定能檢驗認識的真理性 凡經實踐證實的一切認識都是客觀真理,都有不可推翻的性質。不確定性和相對性 1 實踐是歷史的,發展的實踐,具體的實踐有其侷限...