Cakephp Fat Models - 我应该导入组件吗?

时间:2010-07-01 11:39:31

标签: cakephp

让我先说一下这是我的第一个活蛋糕项目。

我正在尝试将逻辑从控制器移到模型中,但是组件不可用的事实使得这很尴尬。

例如,我想在用户注册后发送通知电子邮件。我已将我的电子邮件功能移到模型中,但现在必须将电子邮件组件导入模型。

因此,为了几行代码(不包括消息本身的字符串),我必须导入一个可能已经在控制器中使用的组件(尽管不是在这种情况下)。 / p>

似乎蛋糕并没有为Fat Model概念“安排”?

3 个答案:

答案 0 :(得分:3)

不要从模特发送电子邮件! EmailComponent是一个组件而不是行为是有原因的。模型是关于建模数据的。发送电子邮件与数据建模无关,而是与现实世界进行交互,即输出,这就是该过程由组件和视图文件组成的原因。

如果你的MVC结构中的某些东西看起来真的很尴尬和奇怪,你可能做错了。

答案 1 :(得分:2)

“胖模型”概念并不意味着所有代码都应该移动到模型中,因为我相信你已经知道了。在这种情况下,Cake团队可能会 - 正确地认为 - 发送电子邮件是应用程序逻辑的功能,而不是业务逻辑。如果您接受该前提,则任何邮件或消息传递功能都属于可用组件的控制器。

我总是试着这样想:

如果我要在我的应用程序中创建API,我想重用所有业务逻辑,但很少或没有应用程序逻辑。如果有人通过API对我的应用程序执行操作,那么(通常,根据我的经验),我的应用程序不负责直接向客户发送电子邮件。他/她不知道他/她正在使用我的应用程序,因为它是通过外部源访问的。更好的解决方案是执行业务逻辑,然后根据它的完成能力,让控制器(您的应用程序逻辑)发送电子邮件。

这不会消除每个用例的歧义,但它在我的大多数情况下都有帮助。

答案 2 :(得分:2)

这是你的第一个项目,所以不要过于担心盲目追随'最佳实践'。请记住,控制器是有原因的 - 它不仅仅是门口三明治中的空填充物。

一旦你启动并运行,你就可以根据自己的心愿进行检查和调整,并开始了解为什么你可能想要将逻辑移到(或来自)模型。

从广义上讲,Model是应用程序与数据库的接口。在我看来,模型输出应该是数据,无论是纯粹的(来自数据库)还是修改过的,都没有。

控制器对数据做了一些事情。

视图显示控制器的输出。