資訊洩漏(information leakage):當同一個設計決策被反映在多個模組中。
這會在那些模組之間建立依賴:任何對該決策的變更,都會牽連所有相關模組。
兩種洩漏路徑#
透過介面洩漏#
- 若某項資訊出現在模組介面上 → 依定義就是洩漏了
- 因此「介面越簡單」往往等同於「資訊隱藏越好」
後門洩漏(Back-door Leakage)#
即使資訊不在介面上,仍可能透過共享知識洩漏:
- 例如:兩個類別都知道某個檔案格式的細節(一個讀、一個寫)
- 它們的介面都不暴露這個格式
- 但若格式改變,兩個類別都得改
後門洩漏比介面洩漏更陰險:因為它不顯眼、不易發現。
設計上的紅旗#
資訊洩漏是軟體設計中最重要的紅旗之一。培養對它的高度敏感度,是身為軟體設計者的重要技能。
處理策略#
遇到類別之間有資訊洩漏時,問自己:
「我能怎樣重新組織這些類別,讓這項知識只影響一個類別?」
可能的做法:
- 合併相關類別:若受影響的類別本來就小、且與洩漏的知識緊密相連,併成一個類別合理
- 抽取成新類別:把資訊抽出來建立一個專門封裝該資訊的新類別
抽取成新類別只在能找到「簡單的、抽離細節的介面」時有效。
否則新類別會把多數知識又透過介面暴露——你只是把後門洩漏換成介面洩漏,並沒有真正解決問題。
紅旗:資訊洩漏(Red Flag: Information Leakage)#
同一個知識在多個地方被使用,例如兩個不同的類別都理解某種特定檔案格式。