【问题标题】: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

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2011-11-09
        • 2012-07-18
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多