如何在 iOS 应用程序中设计模型 class(遵循 MVC 模式)

How to design Model class in iOS application (following MVC pattern)

我将开始开发一个新的 iOS 应用程序并计划实施 MVC 模式。以下是我目前对模型、视图和控制器的理解。

View- 负责显示用户界面(例如 xib 文件等...)

controller- 这将是模型和视图之间的桥梁。我们可以考虑这个类别下的视图控制器。另外,我们可以写一个NSObject的subclass来做网络操作(使用NSURLConnection)。

Model- 我知道它负责存储将在视图中显示的数据。但是,它是如何存储的呢?它是单例 class 还是应该是具有自定义 init 方法的 NSObject 的普通子 class?但是,它将如何持久化数据?如果有人能用一个清晰​​的例子来解释这一点,那将非常有帮助。提前致谢!!

MVC 通常与数据访问层或外部服务没有任何关系。回顾 MVC 模式是这样的:

Model负责将数据传递给View的instance

Controller 负责传递 适当的 UI 视图。

View 负责交付UI(用户界面)。

回顾这一点向我们表明,任何 MVC 模式都是专门为控制应用程序的流程和 UI 而设计的。 MVC 模式不考虑任何其他方面,例如:

  1. 数据访问(存储、管理等)
  2. 业务逻辑
  3. 远程服务
  4. 等....

一般来说,假设您遵循 MVC 模式,您仍然需要创建自己的 类(称它们为服务)来与外部系统交互。

对于您的模型 类 它们通常不是单例,而是根据需要构建的。它们应该向拥有对象提供足够的信息以允许与其他应用程序层通信,而不需要拥有对象理解或实现模型服务。

模型代表您的应用运行的数据。它不一定与 数据持久性 有任何关系。

一般来说,您必须考虑在您的应用程序中发挥作用的对象种类。让我们假设一个简单的 To-Do-List-app 就此而言。在这种应用程序中,您的 model 很可能会包含 class 用于 Task(或一些类似的概念)。在 Objective-C 中,您可以创建 class,添加一些有意义的属性。在其最基本和最简单的版本中,它可能如下所示:

@interface Task : NSObject
@property (nonatomic, strong) NSDate *creationDate;
@property (nonatomic, strong) NSString *description;
@property (nonatomic        ) BOOL done;
@end

然后,在运行时您可以实例化此 class 以便对生成的对象执行某些操作。例如。用户可以将 任务 标记为 done

这些对象将驻留在OS的某个内存区域,称为。堆上的数据不会持久化。为了持久化数据,您将不得不使用数据持久化框架,例如 Core DataRealm 或原始 SQLite

此外,为您的模型 classes 使用单例没有多大意义,因为您通常希望实例化它们的多个对象。另一方面,单例的特点是它在您的应用程序的生命周期内恰好被实例化一次。这与模型层的目的是矛盾的。