Model view controller 在MVC上,需要澄清目标责任
假设,作为iphone应用程序的一部分,我需要向用户显示一些对象的列表 模型Model view controller 在MVC上,需要澄清目标责任,model-view-controller,Model View Controller,假设,作为iphone应用程序的一部分,我需要向用户显示一些对象的列表 模型 表示要显示的实际对象 无脑数据,收集获取者和设定者 视图 显示列表,将收到的操作传递给控制器 表示层 控制器 解释从视图接收的操作,并对数据执行操作 位于视图和数据之间 在这幅图中,将模型持久化到磁盘是控制器的责任,还是应该成为模型逻辑的一部分?执行此操作的请求将来自控制器,但是,控制器是否应该知道如何将数据保存到磁盘,或者数据是否应该知道如何将自身保存到磁盘?我可以看到这是双向的。我认为这种逻辑会以这种方
- 表示要显示的实际对象
- 无脑数据,收集获取者和设定者
- 显示列表,将收到的操作传递给控制器
- 表示层
- 解释从视图接收的操作,并对数据执行操作
- 位于视图和数据之间
在这幅图中,将模型持久化到磁盘是控制器的责任,还是应该成为模型逻辑的一部分?执行此操作的请求将来自控制器,但是,控制器是否应该知道如何将数据保存到磁盘,或者数据是否应该知道如何将自身保存到磁盘?我可以看到这是双向的。我认为这种逻辑会以这种方式进入模型,控制器会更干净一些。此外,如果您在不同的模型中使用此功能,并且它基本上是一致的,例如
$person->saveData()
,$user->saveData()
,那么您可以扩展基础模型,以便它可以被其他模型继承,并避免重复代码
如果将此逻辑合并到模型中,则最好使其足够灵活,以便控制器可以覆盖数据的持久化。因此,可能将一个参数传递到模型函数$person->save(false)
中,该false
将阻止模型持久化数据,但默认情况下将为true
这是错误的
模型负责所有业务逻辑。此外,模型不直接了解数据库或任何其他数据存储介质。当模型初始化时,它将接收用于创建DAO或数据映射器的工厂,这些DAO或数据映射器负责存储和检索信息
控制器解释从视图接收到的信息,并更改模型和视图的状态
视图或者通过观察者模式(经典MVC)从持久模型接收信息,或者从模型(Model2 MVC)请求数据