Model view controller 在MVC上,需要澄清目标责任

Model view controller 在MVC上,需要澄清目标责任,model-view-controller,Model View Controller,假设,作为iphone应用程序的一部分,我需要向用户显示一些对象的列表 模型 表示要显示的实际对象 无脑数据,收集获取者和设定者 视图 显示列表,将收到的操作传递给控制器 表示层 控制器 解释从视图接收的操作,并对数据执行操作 位于视图和数据之间 在这幅图中,将模型持久化到磁盘是控制器的责任,还是应该成为模型逻辑的一部分?执行此操作的请求将来自控制器,但是,控制器是否应该知道如何将数据保存到磁盘,或者数据是否应该知道如何将自身保存到磁盘?我可以看到这是双向的。我认为这种逻辑会以这种方

假设,作为iphone应用程序的一部分,我需要向用户显示一些对象的列表

模型

  • 表示要显示的实际对象
  • 无脑数据,收集获取者和设定者
视图

  • 显示列表,将收到的操作传递给控制器
  • 表示层
控制器

  • 解释从视图接收的操作,并对数据执行操作
  • 位于视图和数据之间

在这幅图中,将模型持久化到磁盘是控制器的责任,还是应该成为模型逻辑的一部分?执行此操作的请求将来自控制器,但是,控制器是否应该知道如何将数据保存到磁盘,或者数据是否应该知道如何将自身保存到磁盘?

我可以看到这是双向的。我认为这种逻辑会以这种方式进入模型,控制器会更干净一些。此外,如果您在不同的模型中使用此功能,并且它基本上是一致的,例如
$person->saveData()
$user->saveData()
,那么您可以扩展基础模型,以便它可以被其他模型继承,并避免重复代码

如果将此逻辑合并到模型中,则最好使其足够灵活,以便控制器可以覆盖数据的持久化。因此,可能将一个参数传递到模型函数
$person->save(false)
中,该
false
将阻止模型持久化数据,但默认情况下将为
true

这是错误的

模型负责所有业务逻辑。此外,模型不直接了解数据库或任何其他数据存储介质。当模型初始化时,它将接收用于创建DAO或数据映射器的工厂,这些DAO或数据映射器负责存储和检索信息

控制器解释从视图接收到的信息,并更改模型和视图的状态

视图或者通过观察者模式(经典MVC)从持久模型接收信息,或者从模型(Model2 MVC)请求数据