🎯 什麼情境該想到我
當你「有一筆被許多地方直接讀寫的可變資料(例如全域變數、共享狀態)」的時候——用取值/設值函式把它包起來,讓所有存取都經過同一個入口,之後要加驗證、記錄,或改變它的內部結構都只改一處。
⚙️ 怎麼用(步驟 / 公式)
意圖:用封裝函式(取值/設值)包住可變資料,集中控管對它的存取與修改。
動作要點(小步安全進行):
- 建立取值(get)與設值(set)函式來讀寫這筆資料。
- 逐一把每個直接存取處改成呼叫這些封裝函式,每次都測試。
- 全部改完後,限制這筆資料的可見性(例如設為私有),確保外界只能透過封裝函式存取。
- 若連值本身也要保護不被外部竄改,可在取值時回傳副本、或封裝該筆記錄(見以物件取代基本型別、封裝記錄)。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 若這筆資料是不可變的(immutable),就沒有封裝存取的必要,不需硬包。
- 使用範圍極小、只在單一函式內的臨時資料,封裝反而多此一舉。
🔗 相關工具
- 封裝記錄 Encapsulate Record(把裸資料記錄升級為類別以控管欄位存取)
- 封裝集合 Encapsulate Collection(集合欄位的封裝特例)
- 以物件取代基本型別 Replace Primitive with Object(把被封裝的值進一步升級成有行為的物件)
- 重構