【发布时间】:2020-01-02 12:02:16
【问题描述】:
我正在尝试弄清楚如何在我的应用程序中使用 Core Data。我已经想到对象图在运行时会是什么样子:
-
Account对象拥有TransactionList对象。 -
TransactionList对象包含帐户的所有交易。它不是一个平面列表,而是每天组织交易。因此它包含一个按日期排序的DailyTransactions对象列表。 -
DailyTransactions包含在一天内发生的Transaction对象列表。
起初我认为 Core Data 是一个 ORM,所以我想我可能只需要两个表:Account 表和 Transaction 表,其中包含所有事务并设置上述对象图(即,按日期组织事务和在运行时使用应用程序代码生成DailyTransactions 对象等)。
然而,当我开始学习 Core Data 时,我意识到 Core Data 更像是一个对象图管理器,而不是一个 ORM。所以我正在考虑使用 Core Data 直接实现上述运行时对象关系(我不清楚有什么好处,但我相信 Core Data 必须具有一些有用的功能)。
所以我正在考虑 Core Data 中的数据模型,如下所示:
Acount <--> TransactionList -->> DailyTransactions -->> Transaction
由于我仍在学习 Core Data,我还无法验证设计。我想这是使用 Core Data 的正确方法。但这不是将太多的实现细节而不是原始数据放在持久存储中吗?我认为保存实现细节的问题在于它们比原始数据复杂得多,并且可能包含重复数据。换句话说,数据模型中的“数据”究竟是什么意思,原始数据或任何有用的运行时对象?
另一种方法是通过定义如下数据模型来使用 Core Data 作为 ORM:
Account <-->> Transactions
并使用应用程序代码设置运行时对象图。这导致更复杂的应用程序代码但更简单的数据库设计(我理解用户在使用 Core Data 时不需要直接处理数据库,但拥有更简单的系统仍然是件好事)。也就是说,我怀疑这不是使用 Cord Data 的正确方法。
一个更普遍的问题。我以前很少做数据库编程,但我的印象是,在像 J2EE 这样的服务器端编程框架中,通常在普通的旧数据对象层之上还有一个业务对象层。在这些架构中,封装应用业务的对象与从数据库加载的对象不同。 Core Data 好像不是这样?
提前感谢您的任何解释或建议。
(注意:上面的例子是一个简化的例子。像转账这样的交易涉及两个账户。为了简化,我忽略了这个细节。)
【问题讨论】: