2012-08-12 139 views
11

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

当我的JavaEE正在开发,常见的方法看起来像以下:

  • 模型类是简单的豆代表数据实体(产品,人物等) - 大多喜欢用getter/setter方法的数据结构;

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

  • DAO(DataAccessObject)或存储库类是那些可加载和存储实体到数据库;

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

例如,如果我有实体PersonProductOrder,当用户选择了一些产品,然后点击“放入我的购物车/篮” new OrderPerson应创建这Product应该加入这个Order(我们可以检查Person不坏债务人和Product出现在商店等) - 所有这些工作都是由一些控制器进行调用的OrderService方法进行。

通常某种国际奥委会(控制反转)用于使所有的服务和控制器有联系的必要的服务等

现在我稍微感到困惑如何,这一切都是在CakePHP中完成。我应该在哪里放置这个商业逻辑等?

回答

6

在CakePHP模型层由active record实例的集合组成,称为AppModel。它结合了存储相关的逻辑(你通常会放在DAO中和/或存储库)业务逻辑(通常是什么走进你的“模型”)

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

如果你想知道,你是如何应该实现CakePHP的领域的业务逻辑,只是仰望它赞美活动记录模式的文章。

个人观点
的CakePHP和CodeIgniter的是两个在PHP中最差的框架。
他们充满了坏习惯。

其实,如果你正在做正确的上下的MVC,然后模型层将包含所有被与之相关的业务逻辑和一切。模型层由DAO,存储库,Domain Objects(您称之为“模型”)和服务组成。

虽然您对基于Java的代码的描述表明您有朝着这个方向前进,但CakePHP甚至没有远离它。

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

+0

感谢您的解释。提到ActiveRecord模式让我对这件事更加清楚。关于您的个人观点 - 您认为哪些PHP框架在MVC理念和良好实践之后更好? – 2012-08-13 04:10:02

+3

@RodionGorkovenko,在编码实践方面目前是最好的,被认为是Symfony2。但这就像在补习班里最聪明的一样。而Sf2 [不是MVC框架](http://fabien.potencier.org/article/49/what-is-symfony2)。但是你应该可以使用MVC设计模式。大多数声称为“MVC框架”的PHP框架都遵循RubyOnRails对MVC的解释(视图是模板和模型是ORM),其中包含所有缺点。 – 2012-08-13 04:31:50

+0

爱你的答案@tereško。请保持它! – 2013-02-19 03:40:40

1

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

+0

嗯...看起来我从来没有提到在控制器中放置商业逻辑。尽管我没有想到将其放入模型中。我认为PhpCake中的组件类似于我们在java EE中的服务,但它们看起来更加辅助... – 2012-08-12 19:11:11

0

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

虽然我的看法。

相关问题