WebObjects/EOF/使用 EOF/EOF 戒律
外觀
在使用 EOF 時,一些需要避免的事情。其中一些事項在 Apple 文件中是禁忌,另一些則不是。但所有這些都是經驗表明 EOF 不期望的,會導致各種各樣的問題,包括神秘的異常,以及 EOF 對必須儲存到資料庫的更改感到困惑。
- 不要在 EO 建構函式中設定 EO 屬性 - 請改用 awakeFromInsertion(...) 或 awakeFromFetch(...)。
- 在將 EO 插入編輯上下文之前,不要對其進行任何操作。始終將 EO 立即插入 EC。請參閱規則 #1。
- 不要在 validateFor...(...) 方法中修改任何 EO 屬性。如 ChuckHill 在列表中所述,在 validateValueForKey(...) 中執行此操作是可以的。
- 如果重寫 awakeFromInsertion(...),請記得呼叫超類實現。awakeFromFetch(...) 也是如此。
- 不要更改 EOF 使用的方法的行為。例如,不要覆蓋多對一關係以返回相關物件的排序列表。建立另一個方法來執行此操作。
- 不要在模型類靜態初始化器中使用 EOF。這樣做會迫使 EOF 在框架初始化之前進入操作模式。請改用實體的延遲載入。
- 不要使用可變類(例如 NSMutableArray、NSMutableDictionary、任何其他可以在建立後更改內部狀態的類)作為屬性。如果你想要這種效果,請使用不可變類並提供覆蓋方法來用更新的例項替換不可變例項。你和 EOF 會非常、非常、非常高興。例如:
public void addAppointment(String time, String reason) {
super.willChange();
NSMutableDictionary mutableAppointments = appointments().mutableClone();
mutableAppointments.setObjectForKey(reason, time);
setAppointments(mutableAppointments.immutableClone());
}