CakePHP - 放置服务逻辑的位置

Rod*_*nko 13 architecture cakephp

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

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

  • 模型类是表示数据实体(产品,人员等)的简单bean - 大多数类似于具有getter/setter的数据结构;

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

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

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

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

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

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

ter*_*ško 8

在CakePHP中,模型层由活动记录实例的集合组成,称为AppModel.它们将与存储相关的逻辑(通常放在DAO和/或存储库中)与业务逻辑(通常用于"模型")相结合.

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

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

个人观点
CakePHP和CodeIgniter是PHP中最糟糕的两个框架.
他们充满了不良做法.

实际上,如果你正在做正确的MVC,那么模型层将包含所有业务逻辑以及与之相关的所有内容.模型层由DAO,存储库,域对象(您称之为"模型")和服务组成.

虽然您对基于Java的代码的描述表明,您正朝这个方向发展,但CakePHP甚至还没有接近它.

再说一次,可能是我对 MVC的理解是错误的.

  • @RodionGorkovenko,目前在编码实践方面是最好的,被认为是Symfony2.但这就像在补习班中最聪明一样.Sf2 [不是MVC框架](http://fabien.potencier.org/article/49/what-is-symfony2).但是您应该能够使用MVC设计模式.大多数声称是"MVC框架"的PHP框架都遵循MVC的RubyOnRails解释(视图是模板,模型是ORM),包括所有缺点. (3认同)