4

随着我的 Cocoa 技能逐渐提高,我尽量不滥用 MVC,因为我发现自己回到了我之前的假设所建​​立的一个洞中。我这里没有人可以解决这个问题,所以希望你们中的一个可以帮助...

我有一个自定义模型类,它有许多不同的属性(NSString、NSDate、NSNumber 等)。我需要序列化传输的属性。有时,在处理此数据以进行序列化时,可能会出现用户需要回答的问题(UIAlertView 等)

无需陷入太多细节,这段代码属于哪里?

  • 我的一部分说模型,因为它是关于数据的持久性 - 在某种程度上。
  • 我的一部分说View是因为它是对模型中包含的核心数据(没有双关语)的另一种解释。在处理数据时,用户有时必须与对话框进行交互
  • 我的一部分说控制器,因为它管理模型和视图之间的数据转换。

是三者的结合吗?如果是这样,在处理数据时如何处理类之间的通信?NS通知?直接方法调用?

4

4 回答 4

1

这可能是您想要使用访问者模式的东西 - http://en.wikipedia.org/wiki/Visitor_pattern - 因为您最终可能希望对不同的事物使用不同类型的序列化,并且您可以拥有不同的访问者类而不是模型代码中的很多特殊情况。

以下是objective-c/cocoa中访问者模式的讨论:http: //www.cocoadev.com/index.pl?VisitorPattern

这是 Dobbs 博士的一篇(旧的!!!)文章,关于 Objective-c 中的访问者模式:http ://www.drdobbs.com/184410252

您正在处理的问题不适合 MVC 范例的原因是您正在执行的序列化就像基于流的渲染表面上的视图并且它被显示。有时,这可以在模型中非常顺利地完成,但有时它更复杂,您需要查看您的案例以确定它是哪一个。

通常,您正在使用的传输/Web 服务(或其他)代码将有自己的数据处理程序,例如,ObjectiveResource添加了一个序列化和反序列化处理程序,它作为 NSObject 的扩展,使其能够做很多这样的事情透明的东西,如果您尝试更通用地执行此操作,您可能会查看该代码(特别是 ObjectiveSupport 部分)。

于 2010-02-06T22:03:58.337 回答
0

通常,几乎所有特定于应用程序的代码都属于控制器。控制器应该交互和观察(通过通知)模型并适当地更新视图。

如果您正在进行模型处理,以便它可以在具有相同模型的另一个应用程序中重复使用,那么该处理可能在模型中。

视图可以在 Interface Builder 中布局或在代码中创建和/或为自定义绘图子类化,但它们不应具有应用程序逻辑并且不会直接与模型交互。

于 2010-02-04T02:34:38.830 回答
0

我建议将序列化代码放入模型中。如果进程失败,它可以向正在监听它的任何东西(视图/控制器)报告,然后它可以呈现 UIAlertView,更正问题并重新提交以进行另一次尝试。

于 2010-02-04T09:34:36.183 回答
0

我会在模型中说。

序列化数据的调用将由控制器完成。如果数据不能被序列化,那么模型应该返回一个控制器必须处理的错误。

于 2010-02-04T09:45:11.280 回答