2

我目前正在学习Objective-C,一步一步!现在,我的主要关注点是 MVC 模式。我不确定我是否已经很好地围绕了这个概念。

所以,一些背景信息:我目前正在我的程序中试验“实体”。实体模型包含健康和速度等信息。我已经实现了一个可以利用这个实体的非常基本的控制器。输入是通过命令行界面进行的,这基本上是我的看法。

现在,我的问题是:我的实体控制器应该如何访问模型属性中的信息?我需要能够拥有实体控制器处理的“实体”数组。

在我的控制器的@interface:我已经声明:

NSMutableArray *entities; 

然后在控制器的@implementation 中,我覆盖了init 函数。在这个函数中:

entities = [[NSMutableArray alloc] init]; 

我还有另一个“生成”新实体的功能。

- (void)spawnEntity {

Entity *entity = [[Entity alloc] init];
[entity setName:@"Default"];
...
...
[entities addObject: entity];
}

然后从 main (稍后将成为真正的视图控制器。一旦我在 iPhone 上实际设置了应用程序,因为现在我只是准备模型和一些控制器。):

EntityController *entityController = [[EntityController alloc] init];

[entityController spawnEntity];

这种方法是利用 MVC 模式的正确方法吗?我主要关心的是我在控制器中声明的 NSMutableArray。我不确定我是否正确执行此操作。

任何反馈将不胜感激。

谢谢你。

-史蒂文

4

3 回答 3

1

您将 MVC 设计模式的模型和控制器合并到EntityController. 有时,这样做可能是完美的契合,但出于某些原因,您希望它们彼此分开。拆分它们的一个原因是在添加类、方法和变量时更容易理解代码。另一个原因是代码的可重用性。

在您的示例中,这可以通过为具有NSMutableArray实例变量的模型对象创建一个新类来实现。然后,您的控制器可以创建该类的实例(或单例)以将新实体添加到,而不是添加到它自己的数组中。

但是,如果数组是此应用程序所需的唯一变量,那么您可以完美地坚持当前的模式。一个NSArray(或其子类)本身就是一个模型对象,因此没有必要将它包装在另一个类中。

有关详细信息,请参阅Apple 文档

于 2012-10-19T09:42:41.617 回答
0

MVC 是一种提供关注点分离的模式。“模型”和“视图”是相关对象的集合/分组。每个对象都有完整的功能,应该符合OO原则。

模型对象将与您的业务概念相关,例如用户、帐户、地址等类型。

View 对象通常是 Button、Textarea 等类型。

控制器提供了一个接口,用于调用模型对象之间的交互,这是您的业务逻辑。

传统上,视图对象可以直接与模型对象通信以收集显示信息。

于 2012-10-19T09:35:11.947 回答
0

我已经在 iOS 应用程序中实现了数据访问层的存储库模式,这可以与 CoreData 实体框架或 REST API 一起使用。请查看https://github.com/ducngo-tpl/Repository-Pattern-in-Objective-C。希望它有所帮助。

于 2013-03-04T08:56:50.683 回答