问题 为什么核心数据难以预先填充?


这是一个关于Apple设计决策的哲学问题,而不是关于核心数据的问题。

为什么在世界范围内建立一个难以预先填充的模型系统是有用的?有什么好处?我知道你可以让你的程序生成sqlite文件并手动编辑它,但据我所知,如果你有任何关系,就不能这样做。

我将它与rails中使用的MVC范例进行比较,这似乎更有意义。 rails中的模型为Core Data提供了类似的抽象级别(据我所知),但它们也允许您手动(或通过脚本)将任何内容输入数据库。

我对Core Data的问题在于:因为rails似乎证明(对我来说)你可以从数据库中获得优秀的模型抽象,同时保留几种方便的方法来预先填充它,删除该功能提供了哪些可能的优势?核心数据在某种程度上更有效吗?预填充所涉及的困难仅仅是其他设计选择的副作用,如果是这样,为什么不考虑预填充?

(一个免责声明,我真的对这些选择背后的推理感兴趣,虽然我的帖子可能暗示它,但我并不是真的在寻找“Rails与核心数据中的模型”辩论。)


7152
2017-08-02 14:30


起源



答案:


因为核心数据是  一个数据库。它是一个碰巧持久存储到磁盘的对象图,其中一种持久性格式是数据库。这意味着您需要在反向PoV中查看它。

核心数据旨在尽可能快地进行检索 对象 从那个持久的商店并将它们保存回来。这样做的一个副作用是持久格式专注于使目标更快并且与其他任何东西兼容是最好的次要。因此,SQLite文件的内部结构旨在提高性能,而不是兼容性。

我对预填充的看法是核心数据被设计为闭环系统。您可以使用Core Data轻松填充数据文件。填充Core Data SQLite文件并不比编写脚本将Oracle数据转换为CSV格式更困难。

如果你留在Cocoa和核心数据中,那就不难了。您编写命令行应用程序或编辑应用程序并导入数据。从Cocoa程序员的PoV开始,这是一项简单的任务,只需几分钟。


11
2017-08-02 16:27



它看起来像一个数据库(“一个或多个用途的数据的有组织的集合,通常以数字形式”)给我。无论如何,他的问题似乎都不是基于你所谓的核心数据。起初他把它称为“模型系统”。 - Ken
即使在作为核心数据的“闭环系统”中,预填充也是一项常见任务。为什么没有工具就可以创建这个系统呢?或者,如果Apple不想自己制作,为什么在他们的许可协议中特别禁止对其核心数据模式进行逆向工程,以便一些有进取心的人可以自己编写这样的工具呢? - Evan Cordell
@Evan Cordell - Apple没有创建预填充工具,部分原因是因为它自己很容易实现。在这里查看我的答案: stackoverflow.com/questions/2248363/... 和这里: stackoverflow.com/questions/1264382/... 。我甚至会在视频中显示如何在iTunes U上的iPhone课程中在约15分钟内完成此操作: deimos.apple.com/WebObjects/Core.woa/Browse/... - Brad Larson♦
@Evan Cordell - 就逆向工程而言,他们认为内部核心数据格式是私有的,就像系统显示元素的确切视图层次结构一样。通过不承诺内部结构,这使他们可以自由地在未来的点上改变该结构,以增加新功能或改进那些功能。防止使用私有API一直是Apple的政策,无论好坏,同样的想法也适用于此。 - Brad Larson♦
什么定义预填充?是否在应用程序运行之前,您希望文件中充满数据,或者您只是想在用户首次与应用程序交互时显示某些数据?如果您只是希望用户立即查看一些数据,那么只需在首次启动时或创建新文档时添加一些实体。我甚至做过这样,以便用户可以决定新文档是否有一组默认实体以及这些实体是什么。当然你必须编写一些代码,但是你可以将大量数据存储在XML文件中并只读它。 - theMikeSwan


答案:


因为核心数据是  一个数据库。它是一个碰巧持久存储到磁盘的对象图,其中一种持久性格式是数据库。这意味着您需要在反向PoV中查看它。

核心数据旨在尽可能快地进行检索 对象 从那个持久的商店并将它们保存回来。这样做的一个副作用是持久格式专注于使目标更快并且与其他任何东西兼容是最好的次要。因此,SQLite文件的内部结构旨在提高性能,而不是兼容性。

我对预填充的看法是核心数据被设计为闭环系统。您可以使用Core Data轻松填充数据文件。填充Core Data SQLite文件并不比编写脚本将Oracle数据转换为CSV格式更困难。

如果你留在Cocoa和核心数据中,那就不难了。您编写命令行应用程序或编辑应用程序并导入数据。从Cocoa程序员的PoV开始,这是一项简单的任务,只需几分钟。


11
2017-08-02 16:27



它看起来像一个数据库(“一个或多个用途的数据的有组织的集合,通常以数字形式”)给我。无论如何,他的问题似乎都不是基于你所谓的核心数据。起初他把它称为“模型系统”。 - Ken
即使在作为核心数据的“闭环系统”中,预填充也是一项常见任务。为什么没有工具就可以创建这个系统呢?或者,如果Apple不想自己制作,为什么在他们的许可协议中特别禁止对其核心数据模式进行逆向工程,以便一些有进取心的人可以自己编写这样的工具呢? - Evan Cordell
@Evan Cordell - Apple没有创建预填充工具,部分原因是因为它自己很容易实现。在这里查看我的答案: stackoverflow.com/questions/2248363/... 和这里: stackoverflow.com/questions/1264382/... 。我甚至会在视频中显示如何在iTunes U上的iPhone课程中在约15分钟内完成此操作: deimos.apple.com/WebObjects/Core.woa/Browse/... - Brad Larson♦
@Evan Cordell - 就逆向工程而言,他们认为内部核心数据格式是私有的,就像系统显示元素的确切视图层次结构一样。通过不承诺内部结构,这使他们可以自由地在未来的点上改变该结构,以增加新功能或改进那些功能。防止使用私有API一直是Apple的政策,无论好坏,同样的想法也适用于此。 - Brad Larson♦
什么定义预填充?是否在应用程序运行之前,您希望文件中充满数据,或者您只是想在用户首次与应用程序交互时显示某些数据?如果您只是希望用户立即查看一些数据,那么只需在首次启动时或创建新文档时添加一些实体。我甚至做过这样,以便用户可以决定新文档是否有一组默认实体以及这些实体是什么。当然你必须编写一些代码,但是你可以将大量数据存储在XML文件中并只读它。 - theMikeSwan