WebObjects/EOF/Modeling/Prototypes
原型是 EOF 用于数据库无关建模的机制。通过包含一个具有特殊名称“EOJDBCDatabaseVendorPrototypes”(例如 EOJDBCFrontBasePrototypes 或 EOJDBCOraclePrototypes)的 EOModel,或者回退通用原型“EOJDBCPrototypes”,您可以定义可重用类型定义。例如,您可能声明一个类型定义“money”,它映射到一个精度为 32,刻度为 2 的浮点数,但不同的数据库对此有不同的名称和语法。使用原型,您的模型只需将其类型引用到其原型“money”,原型定义其余部分,并且可以根据您使用的数据库进行切换。
由于原型集中了您的类型信息,因此它也使您更容易对类型进行批量更改。例如,如果您声明一个“address”类型为 varchar(50),然后意识到它不够,您只需将原型更改为 varchar(100),所有类型都会继承该更改。
没有原型的模型,嗯,很笨。没有原型的可重用框架是不可重用的。有关这方面的讨论和代码,请参阅《实用 WebObjects》第 45-55 页。EOModeler 文档中有一些非常肤浅的讨论。
[Project Wonder 有] 很棒的代码,允许您根据属性进行切换,而不是使用通常使用的胡言乱语。我们允许您真正支持多种类型的数据库,这在 EOJDBCPrototypes 中是不可能的。但是,我建议只有在您只有一个模型或非常自律的情况下才使用原型。
EOModeler 并非没有缺陷。尤其是,它对原型非常挑剔。然而,这些小问题是值得的。
EOModeler 必须在您从其打开模型的路径中有一个 .pbproj 或 .xcode 构建文件夹,否则它将无法加载其他框架(尤其是原型框架)。
如果您更改了先前定义列的原型,您可能会注意到 EOModel 中的列名变为棕色。模型中所有呈棕色的列都将由原型定义,但您可能已经注意到,您通常不会在原型中定义列名。因此,当您保存模型时,它将清空您的列名。
如果列确实被清空,它会导致 EOF 内部出现非常令人讨厌且无用的错误消息。我相信您从一个名为“从 NSArray 创建逗号分隔列表”的方法的 SQL 生成中获得了一个 ClassCastException(我手头上没有该异常)。因此,如果您在 EOF 的深处看到 ClassCastException,请记录下此信息,因为它将让您在调试时免受很多痛苦。
最好总是先选择原型,然后再填写列的其余部分。与小的行为变化相比,它最有可能避免烦人的 EOModeler 错误。如果列变成棕色,您将需要重命名该列,然后将其更改回“取消棕色”。