CakePHP - 放置服务逻辑的位置

时间:2012-08-12 17:18:35

标签: cakephp architecture

我是试图调查CakePHP的Java程序员 - 目前我在应用程序结构/设计方面存在问题。我无法理解在哪里放置应用程序的核心逻辑。

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

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

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

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

  

个人意见
  CakePHP和CodeIgniter是PHP中最糟糕的两个框架。
它们充斥着糟糕的做法。

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

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

然后,可能是MVC的my understanding错误。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

我的意见。