WebObjects/EOF/建模/EOModeler
它确实存在,以前也在这里(链接现在失效了):http://developer.apple.com/documentation/WebObjects/UsingEOModeler/4WorkingWithAttributes/chapter_4_section_3.html#//apple_ref/doc/uid/DontLinkBookID_504-DontLinkChapterID_3-BABFGECE
这是最令人烦恼和困难的领域之一。主要问题是生成的代码与您自己的业务逻辑分离。
以下是一些处理此问题的方法
这非常危险,因为每次您对模型进行一些修改时都需要进行合并。我从未设法在没有大量汗水的情况下使其工作。
这是我大部分时间使用的方法。对于每个实际实体,您在模型中创建两个实体:一个包含业务逻辑,另一个包含所有访问器。访问器实体是一个抽象实体,是实际实体的父级。实际实体是您的应用程序将与之交互的实体,永远不需要重新生成。抽象实体用于承载所有访问器,您可以在需要时重新生成它,因为它不承载任何您的代码。
所有关系必须与实际实体建立,否则您将遇到问题
此解决方案只有一个额外的技巧,尝试通过在所有抽象实体前面添加一个通用前缀来将它们放在一起。这样您就可以选择所有这些实体并使用一条命令重新生成它们(几乎需要确认覆盖确认)。
此工具使继承技巧透明。有关更多信息,请阅读EOGenerator部分。
尽管在使用 EOModeler 时,使用 EOGenerator 或上述其他方法来建模您的 EO(使用 GenerationGap 设计模式)很有帮助,但这意味着您需要处理两倍数量的 EO 类,以及更多在运行时向上继承层次结构的消息,以及更多需要签入/签出 CVS 的文件,等等。
如果 EOGenerator 能够在您决定模型相对稳定并且不再需要进行大量 EOModel 更改之后将两个相关的 EO 类“合并”在一起,那就太好了。在项目生命周期的早期,当进行更多更改时,EOGenerator 非常有用。
如何完全不从 EOModeler 生成类文件(假设您正在对 EOGenericRecord 进行子类化),并使 EO 类为空,除了您专门手动添加的自定义方法和访问器之外?只要您使用 KVC 来获取对象属性,这应该可以正常工作。我有没有看到这种方法的缺点?
只需手动添加/删除/编辑属性和关系。
您可以使用高级关系检查器为关系添加参照完整性规则。
要添加参照完整性规则
- 选择要添加规则的关系。
- 在关系检查器中,点击高级关系检查器图标。
您可以使用高级关系检查器中的字段进一步指定关系。此检查器中的选项将在以下部分中描述。
通常,当触发故障时,只会从数据库中获取该对象(或对于多对多关系的数组对象)。您可以通过将故障一起批处理来利用这种对数据库的昂贵往返操作。您在“批处理大小”字段中输入的值表示应该与第一个故障一起触发的相同关系的故障数量。有关批量故障的更多讨论,请参阅企业对象框架参考中的 EODatabaseContext 类规范。
此字段允许您指定关系是可选还是强制性。例如,您可以要求所有部门都有一个位置(强制性),但不要求每个员工都有一个经理(可选)。
此字段允许您指定应应用于参与关系的实体的删除规则。例如,您可能有一个部门有多个员工。当用户尝试删除部门时,您可以
- 删除部门并删除员工对部门的任何反向引用(置空)。
- 删除部门及其包含的所有员工(级联)。
- 如果部门包含员工,则拒绝删除(拒绝)。
- 允许删除并且对目标对象不执行任何操作(不采取任何行动)。
不采取任何行动规则对于调整性能很有用。但是,您应该谨慎使用此删除规则,因为它可能导致对象图中出现悬空引用。有关更多信息,请参阅企业对象框架参考中的 EOClassDescription 类规范。
“拥有目标”复选框允许您将源对象设置为拥有其目标对象。当源对象拥有其目标对象时,从源对象的关联数组中删除目标对象也会导致其从数据库中删除(或者,您可以将其转移到新的所有者)。这是因为所有权意味着被拥有的对象在没有所有者的情况下无法存在,例如,行项目不能存在于采购订单之外。
“传播主键”复选框允许您指定源实体的主键应传播到关系目标中新插入的对象。这通常用于所有权关系,其中被拥有的对象具有与源相同的 主键。例如,在“电影”数据库中,TalentPhoto 实体具有与其所有者实体 Talent 相同的主键。
EOModeler 是一个非常古老的应用程序,自 NeXT 收购以来,苹果对其关注不多。它有一些奇怪的行为,其中一些在 EOModeler 错误 页面中有记录。
有关与原型相关的 EOModeler 错误,请参阅 原型注意事项。