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