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