2013-06-25 30 views
4

這更像是一個理論問題,但核心數據對象如何適合應用程序的「模型」?在最簡單的層面上,「模型」可以直接作爲核心數據對象,但是它們本身就是沒有任何「可觀察」功能的數據容器。可能有一個單獨的模型類封裝了核心數據對象,這似乎是一個更好的解決方案,但我不確定引用是強還是弱。Core Data如何適合MVC模型對象?

此外,模型應該關心和/或處理自己的持久性?

+0

「核心數據」不是MVC設計模式的一部分。聽起來就像你想在其他面向對象的代碼中強調一些全局狀態。 –

+0

它怎麼樣?就其本身而言,我猜你可以將Core Data視爲持久性機制,但其管理對象本質上是應用程序的狀態。也許我不明白你的意思... – chinabuffet

+0

@tereško我認爲他在談論DAO和服務中的域對象,它們確實在模型中。 – LMeyer

回答

8

在Apple使用MVC習慣用法的上下文中,核心數據本身絕對有資格適用於整個數據層。

託管對象的子類可以包含很多功能 - 您稱之爲模型「邏輯」。這是一種非常常見的設計模式。例如,如果您的數據模型使用美元值來描述交易數據,則可以使用提取這些值的總和的提取請求模板。通過使用提供計算/格式化等數據的自定義方法擴展您的託管對象,您可以做更復雜的事情。

在您的控制器中,您可以讀取和更改數據,並從UI獲取輸入並更新數據的顯示。你的控制器不應該做的比這更多。

當然,在極其複雜的應用程序邏輯的情況下,您總是可以創建一個像DerivativesTradingProfitabilityEngine這樣的單例,它可以從Core Data收集數據並將其提供給UI控制器。如果你需要在後臺線程中進行大量的繁重工作,這可能是合適的。

然而,在大多數情況下,標準的核心數據設置就足夠了。

+0

如何用自定義方法擴展託管對象?如果您將方法添加到生成的類中,那麼在添加新字段之後再次生成它們時它們是否會丟失? – chinabuffet

+3

有效的點。我通常使用單獨文件中定義的類別來完成此操作。 – Mundi

相關問題