【问题标题】:Where to put certain logic in CakePHP在 CakePHP 中放置某些逻辑的位置
【发布时间】:2010-02-17 07:58:12
【问题描述】:

我最近开始重写我几年前使用 CakePHP 完成的一个项目。这次我正在尝试“正确”地做所有事情,所以也许有人会给我一个关于以下操作的指示:

我在视图中使用 Model->find('all') 从表中显示一个简单表。此表中有两个布尔字段,它们共同构成了我需要向用户显示的内容。所以:0x0 = 'A',1x0 = 'B',0x1 = 'C',1x1 = 'D'。我应该把这个逻辑放在哪里?我一直在考虑以下方法:

  1. 视图
  2. 视图助手
  3. 控制器
  4. Model->find('all') 输出此值的模型中的某些内容(这甚至可能吗?)

这个任务可能看起来微不足道,但我认为它可以让我从一开始就让这个项目组织起来并易于维护。

谢谢!

【问题讨论】:

    标签: php cakephp separation-of-concerns


    【解决方案1】:

    嗯,这取决于组成决赛桌的逻辑类型(是演示还是业务?)。

    假设您添加了新类型的 UI,例如命令行界面。你会如何在那里展示你的桌子?对于 HTML 和控制台演示文稿,传递给 View 的数据必须相同。所以负责准备数据的逻辑是业务逻辑,它应该放在模型中。负责显示数据的逻辑应该放在 View 中(如果多次使用,可能放在 View 助手中)。

    并且永远不要将这种逻辑放在Controller中。

    【讨论】:

    • 我同意。如果这仅与表格的呈现方式有关,请将其放入 ViewHelper。但如果这是与模型状态有关的信息,请将其放入模型中,为每个组合状态命名并通过 getter 访问它。
    • 也同意。我会将它放在 afterFind 回调中以获得很好的 DRY 支持
    【解决方案2】:

    如果它是你要在所有地方使用的东西,我会把它放在模型中。您可以在模型上放置一个返回该值的方法,或者循环遍历您在 afterFind 回调中检索到的所有行并将其设置为适当的字段。

    【讨论】:

      【解决方案3】:

      如果要确定渲染样式,我会将这种逻辑放在视图中。这样,设计师就拥有最大的访问权限,并可以相应地进行样式设置。

      另一方面,如果这两列只是为了方便数据建模而存在,则将其放入模型中。设计师甚至不应该意识到其他可能性!

      【讨论】:

        【解决方案4】:

        在控制器中!模型中的方法来自控制器。该视图仅用于输出(如 HTML UI 编程。)

        【讨论】:

        • 控制器确实是最糟糕的地方。它的职责只是处理请求。您需要瘦控制器和胖模型。
        • 业务逻辑应该在模型中是。
        猜你喜欢
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 2012-09-12
        • 2011-12-16
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 2016-01-18
        相关资源
        最近更新 更多