跳轉到內容

WebObjects/EOF/使用 EOF/EOF 戒律

來自華夏公益教科書,開放的書籍,開放的世界

在使用 EOF 時,有一些事項需要避免。其中一些在 Apple 文件中被認為是禁忌,而另一些則不是。但所有這些都是經驗表明 EOF 不期望的事情,並且會導致各種問題,包括神秘的異常和 EOF 對必須儲存到資料庫的更改感到困惑。

  1. 不要在 EO 建構函式中設定 EO 屬性 - 而是使用 awakeFromInsertion(...) 或 awakeFromFetch(...)。
  2. 在將 EO 插入編輯上下文之前,不要對它進行任何操作。始終立即將 EO 插入 EC 中。請參見規則 #1。
  3. 不要在 validateFor...(...) 方法中修改任何 EO 屬性。正如 ChuckHill 在列表中提到的,在 validateValueForKey(...) 中這樣做是可以的。
  4. 如果重寫 awakeFromInsertion(...),請記住呼叫超類的實現。對於 awakeFromFetch(...) 也是如此。
  5. 不要更改 EOF 使用的方法的行為。例如,不要覆蓋多對多關係以返回相關物件的排序列表。建立另一個方法來執行此操作。
  6. 不要在模型類靜態初始化器中使用 EOF。這樣做會迫使 EOF 在框架初始化之前進入執行模式。而是使用實體的延遲載入。
  7. 不要使用可變類(例如 NSMutableArray、NSMutableDictionary 或任何其他在建立後可以更改內部狀態的類)作為屬性。如果你想要這種效果,請使用不可變類並提供覆蓋方法以用更新的例項替換不可變例項。你和 EOF 會非常、非常、非常高興。例如:
public void addAppointment(String time, String reason) {
    super.willChange();
    NSMutableDictionary mutableAppointments = appointments().mutableClone();
    mutableAppointments.setObjectForKey(reason, time);
    setAppointments(mutableAppointments.immutableClone());
}
華夏公益教科書