在MVC上,需要澄清对象责任

时间:2011-10-12 14:38:00

标签: model-view-controller

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

模型

  • 表示要显示的实际对象
  • 无脑数据,吸气剂和二传手的收集

视图

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

控制器

  • 解释从视图收到的操作并对数据执行操作
  • 坐在视图和数据之间

在这张图片中,控制器有责任将模型保存到磁盘,或者它应该是模型逻辑的一部分吗?请求执行此操作将来自控制器,但是,如果控制器知道如何将数据保存到磁盘,或者数据应该知道如何将自己保存到磁盘?

2 个答案:

答案 0 :(得分:1)

我可以看到这两种方式。我认为这种逻辑以这种方式进入模型,控制器更清洁。此外,如果您在模型中使用此功能并且它大部分是一致的,例如$person->saveData()$user->saveData(),那么您可以扩展基本模型,以便其他模型继承它并从重复代码中保存。

如果将此逻辑合并到模型中,那么使其足够灵活以使控制器可以覆盖数据的持久性可能是个好主意。所以也许,将一个参数传递给模型函数$person->save( false )这个false会阻止模型持久化数据,但默认情况下会true

答案 1 :(得分:1)

这是错误的。

Model负责所有业务逻辑。另外,模型不直接了解数据库或任何其他数据存储介质。初始化模型时,它会接收工厂来创建DAO或DataMappers,它们负责存储和检索信息。

Controller从视图中解释收到的信息,并更改模型和视图的状态。

查看要么通过观察者模式(经典MVC)从持久模型接收信息,要么从模型请求数据(Model2 MVC)。