简单的MVC设置/设计?

时间:2010-02-25 19:32:16

标签: objective-c iphone cocoa-touch model-view-controller

我只是想确保我正在朝着正确的方向前进,以及如何构建一个简单的MVC应用程序。

// MODEL
@interface Reactor: NSObject {
    NSNumber *temperature;
    NSString *lastInspection;
    NSNumber *activeRods;   
}

// CONTROLLER
@interface viewController: UIViewController {
    UITextField *tempTextField;
    UITextField *inspectTextField;
    UITextField *activeTextField;
    Reactor *reactor;
}
@property ...
...
-(IBAction)ButtonPressed;
@end

我是否正确声明控制器中的reactor(dataModel)?我看到控制器的方式位于[VIEW]和[MODEL]之间,所以它需要链接到两者。

[VIEW]通过“IBActions”链接到[CONTROLLER]中实现的方法,后者又将消息发送到[MODEL]中的方法。 [MODEL]进行所需的任何处理/数据操作,将任何所需的结果发送回[CONTROLLER],而[CONTROLLER]又可用于更新[VIEW]。

这听起来有道理吗?

加里

2 个答案:

答案 0 :(得分:5)

对于一个非常小的简单模型,你可能会冒这个风险但是你真的不应该把它作为一种习惯来开发,因为这种方法会随着你的项目变大而崩溃。

如果您有一个应用程序有两个或多个视图将数据输入和输出模型,会发生什么?当您的应用具有多个视图并从URL获取数据时会发生什么?如果要在html甚至命令行界面中使用数据模型,会发生什么。当你想在另一个应用程序中使用数据模型时会发生什么?

如果您要编写具有数千个用户,多个版本和可能的衍生产品的严格代码,您需要尽早养成良好的习惯。

数据模型的最佳方法是创建一个单例来保存它。我建议创建一个通用的单例类,然后将任何特定项目的模型作为该类的子类。这样,您就可以从应用程序的任何位置访问整齐的模型。

第二种最佳方法是将数据模型对象驻留在app delegate中。然而,随着项目的扩展,这可能会变得笨拙。

我看到的每一条教学/教程信息几乎都忽略了数据模型,而不是教你如何为界面做眼睛糖果。数据模型只是简单的数组或一些固定在控制器侧面的数组。

相信我,你不希望成长和发展你的应用程序的噩梦只是发现它的数据模型逻辑和数据分散在十几个视图控制器上。咬牙切齿,从一开始就正确地做好,你永远不会出汗。

Edit01:

  

Singleton,我将不得不做一些   研究,你能解释一下如何   你会从中获取   [控制器]?只是好奇如果   [MODEL]再次进入AppDelegate   你将如何从中获取它?   [控制器]?

通过以下方式将数据模型驻留在应用程序委托中:(1)使数据模型对象成为应用程序委托的属性;(2)使用应用程序委托的全局引用表单:

MyDataModelClass *theModel=[[UIApplication sharedApplication] delegate] dataModelProperty];

创建singletonlittle more involved。您可以像使用NSFileManger一样使用它。你会以同样的方式引用它。

NSFileManger *fm=[NSFileManager sharedInstance];

这可确保应用程序中只有一个文件管理器处于活动状态。您可以从控制器以相同的方式调用数据模型:

MyDataModelClass * theModel = [MyDataModelClass sharedInstance];

如果您仔细设计数据模型对象,使其完全控制写入哪些信息,您可以安全地在任何地方使用它,而不必担心您的数据会被一个粗心的代码行所破坏。

答案 1 :(得分:1)

你是对的,模型应该存储你所有与业务相关的对象,它们可以通过控制器进行修改,视图根据用户操作在控制器上进行调用。