CoreData,每个模块不相关的数据 - 一个堆栈还是每个模块?

时间:2014-05-11 13:08:29

标签: ios core-data

在我们的应用程序中,我们目前需要存储不同模块的数据,完全不相关。我们想要使用Core Data。据我所知,我们有几个选择:

  1. 创建多个模型描述(每个模块描述一个'模块'),并为每个模块使用单独的核心数据堆栈
  2. 创建多个模型描述,如#1,但使用单个CD堆栈(我认为单个协调器可以通过使用'配置来包含多个模块)
  3. 使用一个配置创建单个模型描述,该配置将包含所有实体,并使用单个堆栈
  4. 以上可能有更多变化......
  5. 此外,所有这些选项都可以与单个托管对象上下文一起使用,也可以与多个上下文一起使用。

    最好的方法是什么?

    我倾向于使用选项#1,即单独的模型描述文件,单独的协调器,单独的上下文,因为如前所述,'模块'是完全不相关的,如果一个模块'模块实际上是错误的。与另一个实体做了一些事情。模块数据也可能与其他模块分开/在不同的时间进行版本化/迁移,尽管我们还没有必要/用例。 (我也不知道CD版本是如何工作的,即是为整个模型设置某种版本,还是仅为每个实体分别设置?如果是前者,分成多个模型可能是一个优势)。

    但也许使用选项#1太多而且过于复杂/过度工程,我应该不关心并把所有东西都放在一个袋子里?

1 个答案:

答案 0 :(得分:2)

以下是您的决定的一些帮助:

  1. 如果模块在很大程度上相似,我认为复制相同或几乎相同的模型信息将是多余的。在这种情况下,我更喜欢#2。
  2. 您可以使用多个商店。但是,这确实会给您的项目增加一些复杂性。根据数据的总体大小,多个商店可能有意义。如果数据量有限,则没有理由不使用一个商店。
  3. 多个存储的通常用例是使用一个只读静态数据,一个是动态的,可以写入。我认为,如果它们位于同一个商店中,那么会影响性能的大型不同数据集也是使用多个商店的一个很好的理由。
  4. 迁移不是一个真正的问题。在CD中,您可以创建新的实体和属性,更改其行为,将数据从一个复制到另一个,等等。您将对迁移进行非常精细的控制,因此在任一情况下都不会更改。
  5. 在我看来,害怕"混淆"永远不应混合的数据不是有效数据。无论您的架构选择如何,程序中的逻辑都应确保正确的功能。