2010-02-25 72 views
1

我只想确保我正朝着正确的方向发展,构建一个简单的MVC应用程序。简单的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]。

这听起来很明智吗?

加里

回答

5

你可以冒这个一个非常小的,简单的模型,但你真的不应该发展它作为一种习惯,因为这种方法会破坏作为你的项目规模不断扩大。

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

如果你要写严肃的代码,将有成千上万的用户,多个版本和可能的衍生品,你需要尽早养成良好的习惯。

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

第二个最好的方法是将数据模型对象停放在应用程序委托中。但是,随着项目规模的扩大,这可能会变得不合时宜。

它肯定不会帮助我所看到的每一条教学/辅导信息都会忽略数据模型,而倾向于教您如何为界面做眼睛糖果。数据模型只是简单的数组,或者一些这样的控制器侧面。

相信我,您不希望发展和发展您的应用程序的噩梦,只发现其数据模型逻辑和数据分散在十几个视图控制器。咬紧牙关,从一开始就正确做到这一点,你永远不会为它出汗。

Edit01:

单身,我将不得不做一些 研究,你可以解释一下你将如何 访问从 [控制器]?只是好奇 [MODEL]再次进入AppDelegate 你将如何从 [CONTROLLER]访问它?

您将车停在由(1)使数据模型中的应用程序委托的数据模型对象中的应用程序委托,并使用该应用代表全局引用形式(2)的性质:

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

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

NSFileManger *fm=[NSFileManager sharedInstance]; 

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

MyDataModelClass * theModel = [MyDataModelClass sharedInstance];

如果您仔细设计数据模型对象,使其可以完全控制写入的信息,那么可以安全地在任何位置使用它,而不必担心数据会被粗心的代码行丢弃。

+0

谢谢,这正是我所遇到的问题,似乎有很多关于[视图]和[控制器]的信息,但是当涉及到[模型]时,它通常太简单而无法使用。 – fuzzygoat 2010-02-25 20:55:53

+0

辛格尔顿,我将不得不做一些研究,你能否解释一下你将如何从[CONTROLLER]访问?只是好奇,如果[MODEL]再次进入AppDelegate,你将如何从[CONTROLLER]访问它? – fuzzygoat 2010-02-25 21:01:27

+0

查看我的编辑的详细信息。 – TechZen 2010-02-26 04:02:01

1

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