時序分解(temporal decomposition):系統結構對應到「操作發生的時間順序」。
這是常見的資訊洩漏成因。
經典範例#
考慮一個應用程式:
- 讀某個格式的檔案
- 修改檔案內容
- 把修改後的檔案寫回去
時序分解傾向把它拆成三個類別:
- 一個負責讀檔
- 一個負責修改
- 一個負責寫檔
問題在於:讀檔與寫檔兩個類別都要懂這個檔案格式 → 資訊洩漏。
比較好的做法#
- 把「讀檔」與「寫檔」的核心機制合併到同一個類別
- 該類別在讀階段與寫階段都會被使用
- 檔案格式的知識集中在一個地方
為什麼容易掉進陷阱#
寫程式時,操作的執行順序常常是你腦中最強烈的線索——很自然就照那個順序拆模組。
但實際上:
- 多數設計決策會在應用生命週期中多次浮現
- 因此時序分解經常導致資訊洩漏
順序當然重要——但別讓它決定模組結構#
執行順序會被反映在程式裡的某個地方,這沒問題。但:
不要讓順序決定模組結構——除非該結構恰好與資訊隱藏相容(例如不同階段使用完全不同的知識)。
設計模組時,聚焦在「執行每項任務需要哪些知識」,而不是「任務的發生順序」。
紅旗:時序分解(Red Flag: Temporal Decomposition)#
在時序分解中,執行順序被反映在程式碼結構上:發生在不同時間的操作被放在不同的方法或類別。
如果同一份知識在不同時間點都會用到,就會被編碼在多處,造成資訊洩漏。