【问题标题】:CakePHP - where to put service logicCakePHP - 放置服务逻辑的位置
【发布时间】:2012-08-09 02:02:11
【问题描述】:

我是一名试图研究 CakePHP 的 Java 程序员 - 目前我在应用程序结构/设计方面遇到问题。我不明白将应用程序的核心逻辑放在哪里。

当我在 JavaEE 中进行开发时,常见的方法如下所示:

  • 模型类是代表数据实体(产品、人员等)的简单 bean,主要类似于带有 getter/setter 的数据结构;

  • 控制器类是足够简单的类,它们聚合必要的数据并将它们注入专用的视图模板,然后发送给用户;

  • DAO (DataAccessObject) 或 Repository 类是可以将实体加载和存储到数据库中的类;

  • 服务类通常是包含某些业务逻辑方法的单例 - 这些由控制器、其他服务或计划操作调用,另一方面,它们本身调用 DAO / 存储库方法来获取或修改数据。

例如,如果我有实体 PersonProductOrder,当用户选择某些产品并单击“将其放入我的购物车/购物篮”new Order 时,应该创建此 Person 并且此Product 应该添加到这个Order (我们可以检查Person 是不是坏债务人以及Product 是否存在于商店等) - 所有这些工作都是在一些人调用的OrderService 方法中执行的控制器。

通常使用某种 IOC(控制反转),以便所有服务和控制器都链接到必要的服务等。

现在我对这一切是如何在 CakePHP 中完成的有些困惑。我应该把这个业务逻辑等放在哪里?

【问题讨论】:

    标签: cakephp architecture


    【解决方案1】:

    在 CakePHP 中,模型层由 active record 实例的集合组成,称为 AppModel。它们将与存储相关的逻辑(您通常会放入 DAO 和/或存储库)与业务逻辑 (通常放入您的“模型”)结合在一起。 p>

    任何其他与域相关的逻辑(来自您的服务)成为控制器的一部分。

    如果你想知道,你应该如何在 CakePHP 中实现领域业务逻辑,只需查找赞美 活动记录 模式的文章即可。

    个人意见
    CakePHP 和 CodeIgniter 是 PHP 中最糟糕的两个框架。
    它们充满了不良做法。

    实际上,如果您使用的是正确的 MVC,那么 模型层 将包含所有业务逻辑以及与之相关的所有内容。模型层由 DAO、存储库、Domain Objects(您称之为“模型”)和服务组成。

    虽然您对基于 Java 的代码的描述表明,您正朝着那个方向前进,但 CakePHP 甚至还没有接近它。

    再一次,可能是MVC的my understanding是错误的。

    【讨论】:

    • 感谢您的解释。提到 ActiveRecord 模式让我更清楚。至于您的个人意见——您认为哪些 PHP 框架更符合 MVC 理念和良好实践?
    • @RodionGorkovenko ,就编码实践而言,目前最好的一个被认为是 Symfony2。但这就像在补习班上最聪明的那种。 Sf2 是not an MVC framework。但是您应该能够使用 MVC 设计模式。大多数声称是“MVC 框架”的 PHP 框架都遵循 RubyOnRails 对 MVC 的解释(视图是模板,模型是 ORM),包括所有缺点。
    • 喜欢你的回答@tereško。请继续加油!
    【解决方案2】:

    控制器应该只包含与整个 Web 应用程序相关的逻辑。您的业​​务逻辑属于模型。我认为这是您在许多 cakePHP 应用程序中发现的基本错误之一,将太多逻辑放入控制器中,而控制器实际上属于模型。

    【讨论】:

    • 嗯...看起来我从来没有说过将业务逻辑放在控制器中。虽然我也没有想过把它放在模型中。我认为 PhpCake 中的组件类似于我们在 java EE 中的服务,但它们看起来更辅助......
    【解决方案3】:

    在 CakePHP 中。 “M”只是一堆数据模型而不是领域模型。 在我看来。 CakePHP 是为 RAD 开发而设计的。它不适合企业应用程序。

    我的意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2010-11-30
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多