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 錯誤。如果列變成棕色,您將需要重新命名該列,然後將其更改回“取消棕色”。