跳转到内容

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());
}
华夏公益教科书