我是试图调查CakePHP的Java程序员 - 目前我在应用程序结构/设计方面存在问题。我无法理解在哪里放置应用程序的核心逻辑。
当我在JavaEE中开发时,常见的方法如下:
模型类是简单的bean,代表数据实体(产品,人员等) - 主要是像getter / setter的数据结构;
控制器类是足够简单的类,它们聚合必要的数据并将它们注入专用的视图模板,然后发送给用户;
DAO(DataAccessObject)或Repository类是可以将实体加载并存储到数据库中的类;
服务类通常是包含某些业务逻辑方法的单例 - 这些方法由控制器,其他服务或调度操作调用,另一方面,它们自己调用DAO / Repository方法来获取或修改数据。
例如,如果我有实体Person
,Product
和Order
,当用户选择某个产品并点击“将其放入我的购物车/购物篮”new Order
时应创建Person
,并将此Product
添加到此Order
(我们可能会检查Person
是不是坏债务人且商店中存在Product
等等) - 所有这些工作都是由某个控制器调用的OrderService
方法执行的。
通常使用某种IOC(控制反转),以便所有服务和控制器都有必要服务的链接等。
现在我对CakePHP中如何完成这一切感到有些困惑。我应该把这个业务逻辑等放在哪里?
答案 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开发而制作的。它不适合企业应用程序。
我的意见。