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());
}