核心数据:设计问题。对象包装器与否?

时间:2009-09-25 16:05:09

标签: core-data wrapper cocoa-design-patterns

我正在使用Core Data(适用于iPhone)设计我的第一个项目,我遇到了一些可能与我的设计方法有关的问题。

我正在做一个允许用户创建订单的应用程序(比方说餐馆)。 我正在使用图形设计器来建模我的持久性对象(即OrdeMO)。我将MO添加到每个名称的ead中以指示其托管对象。 我使用XCode自动创建托管对象类。

我创建了一些“DAO”类,允许您在托管上下文中搜索或创建新对象。

现在我的问题。

我想创建一个OrderMO对象来存储用户正在创建的顺序,但我不希望它成为上下文的一部分,直到用户实际放置它。 我尝试使用[OrderMO alloc]创建对象,但我得到的对象是“不完整的”,当我尝试设置其任何属性时,我得到一个错误。

我假设问题是我需要在上下文中创建订单才能使用它。是这样吗?

我考虑过各种选择:

  1. 在上下文中创建对象,如果用户丢弃订单,则用户回滚。问题是用户可能在进程中保存其他上下文对象(比如他的prefs),所以这不起作用。有没有办法在“单独的事务中”创建对象?

  2. 创建一个包装对象,该对象将保存与MO相同的数据,然后仅在用户下订单时创建MO。这样做的缺点是我必须维持一个新的课程。

  3. 在MO中创建属性,例如“已放置”,并用于在上下文中过滤我的搜索。这个问题是我最终会在域中使用“垃圾”对象(即未放置的订单),我将不时做一些清理......

  4. 我还有其他选择吗?

    任何建议都表示赞赏。

    谢谢(阅读这篇长篇文章!) Gonso

1 个答案:

答案 0 :(得分:0)

如果用户决定不下订单,您应该在托管对象上下文中创建OrderMO对象,然后delete。 如果在删除对象之前保存了上下文,则在下次保存时将从持久性存储中删除“trash”对象(如果未保存上下文,则“trash”对象将永远不会保存到持久性存储中) 。
确定订单是否已下达的标志不必像您在选项3中建议的那样存在于OrderMO对象中。它可能位于跟踪正在编辑的订单的视图控制器中。而且,再次,您将没有“垃圾”对象,因为它们将被删除。