跳轉到內容

WebObjects/EOF/使用 EOF/EOF 戒律

來自華夏公益教科書,開放的書籍,開放的世界
(重定向自 程式設計: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());
}
華夏公益教科書