gpt4 book ai didi

php - Symfony2 MVC : where does my code belong?

转载 作者:可可西里 更新时间:2023-11-01 12:47:08 39 4
gpt4 key购买 nike

我正在寻求澄清是将代码放入 Controller 、实体还是提供服务。

我有“cardset”和“card”对象(其中许多后者嵌入前者 MongoDB 中),由普通的 PHP 类/对象表示。这些包含属性,例如'id', 'postal_address'.

我有一个生成卡片 PDF 的方法。目前我在“Card”对象中有它,所以我可以从 Controller 调用:

$card->makePDF()

这对我来说似乎很干净而且面向对象,但我怀疑我错了。

如果我将所有逻辑都放在 Controller 中,这会变得又长又笨重,而且我不确定 Controller 是否是作用于我的对象的方法所在的地方。这就是服务的目的吗?

尝试总结一下:一个对象是否应该知道它可以“对自己”做的所有常规事情并将它们作为成员函数包含在内部,或者是否应该将其他地方的方法传递给对象以进行操作。如果是这样,这些方法应该保存在哪里?

我很确定它不是“存储库”,因为它似乎只是帮助检索/存储实体。

谢谢!

最佳答案

简答:

PDF 生成应该是一种服务,而不是对象上的方法。

更长的答案:

一般来说,尤其是在 Symfony2 中,模型应该只用于存储数据。 Controller 用于操纵模型之间的关系, View 用于以人类或计算机可读的形式表达数据。服务适用于实际上不属于上述任何内容的事物——与您的 Web 应用程序的状态无关的事物。

一个很好的例子是发送电子邮件。电子邮件包含数据(模型)。用户已发送电子邮件( Controller )。电子邮件看起来以某种方式(查看)。然而,实际发送电子邮件的行为独立于 Web 应用程序的状态(所有服务都知道它被要求将此电子邮件发送给这些人)。因此,有一个仅处理发送电子邮件的独立服务是有道理的。

同样,生成 PDF 文件的行为独立于 Web 应用程序的状态。 PDF 生成器不需要知道您的应用程序中发生了什么,它只知道它被要求制作 PDF。

关于php - Symfony2 MVC : where does my code belong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440519/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com