【问题标题】:On MVC, clarification on object responsibility needed在 MVC 上,需要澄清对象责任
【发布时间】:2011-10-12 23:21:31
【问题描述】:
假设,作为 iphone 应用程序的一部分,我需要向用户显示一些对象的列表。
模型
- 表示要显示的实际对象
- 无脑数据,getter 和 setter 的收集
观点
控制者
- 解释从视图接收到的操作并对数据执行操作
- 位于视图和数据之间
在这张图片中,将模型保存到磁盘是控制器的责任,或者,它应该是模型逻辑的一部分吗?执行此操作的请求将来自控制器,但是,控制器应该知道如何将数据保存到磁盘,还是数据应该知道如何将自己保存到磁盘?
【问题讨论】:
标签:
model-view-controller
【解决方案1】:
这是错误的。
模型负责所有的业务逻辑。此外,模型不直接了解数据库或任何其他数据存储介质。当模型初始化时,它会接收工厂来创建 DAO 或 DataMapper,这些 DAO 或 DataMapper 负责存储和检索信息。
Controller 解释从 view 接收到的信息,并改变模型和视图的状态。
View 要么通过观察者模式(经典 MVC)从持久模型接收信息,要么从模型(Model2 MVC)请求数据。
【解决方案2】:
我可以看到这是双向的。我认为这个逻辑以这种方式进入模型,控制器更干净一些。此外,如果您在模型之间使用此功能并且它几乎是一致的,例如$person->saveData()、$user->saveData(),那么您可以扩展基本模型,以便其他模型继承它并避免重复代码。
如果将此逻辑合并到模型中,最好让它足够灵活,以便控制器可以覆盖数据的持久化。所以也许,将参数传递给模型函数$person->save( false ) 这个false 会阻止模型持久化数据,但默认情况下会是true。