gpt4 book ai didi

symfony - Symfony 2中的代码分离- Controller vs服务vs实体

转载 作者:行者123 更新时间:2023-12-04 13:16:04 26 4
gpt4 key购买 nike

我正在使用symfony 2,并且对代码分离有疑问。我想确保我正确理解 Controller 中应包含哪些元素,服务中应包含哪些元素以及实体中应包含哪些元素。

假设我有需要显示的文档列表。在显示每个文档之前,我还必须执行一些逻辑运算(例如,添加两个变量)。

如所理解的那样,实体类仅在单个实体上进行数据检索和操作时注意。我不应该在此处输入任何自定义代码。据我了解,这应该由服务来完成。

但是我应该:

  • 使用服务基于一些传递给 Controller ​​的文档列表
    执行所需的逻辑
  • 之后的条件
  • 或使用 Controller 下载文档列表,然后传递
    文件要执行一些逻辑服务?

  • 我宁愿认为第一种方法适合使 Controller 变薄(瘦 Controller ,大型模型),但是这种方法对吗? 实体中应包含什么代码, Controller 中应包含什么代码,服务中应包含什么代码?

    特别是在 Controller 或服务方面,我应该与实体管理者联系什么?

    我们还假装在我的应用程序中的许多地方,我需要先检查文档是否已完成,然后再允许用户执行任何操作(例如,对其进行编辑)。绝对应该在一个服务中,因为需要另一个服务来检查它。但是,我是否应该将文档实体对象加载到 Controller 中,将其发送给服务以验证它是否可以最终确定,或者应该将文档加载到服务中并在那里进行检查?

    最佳答案

    我的Symfony 2架构是(使用教义ORM):

  • 仅带有路由逻辑
  • 的瘦 Controller
  • 每个实体的服务(也称为“经理”)(所有业务逻辑都在这里)
  • 满足我其他需求(即使用Amazon S3或Mandrill邮件系统等外部工具)的定制服务
  • 每个实体的存储库(只是从数据库读取实体的方法)

  • Controller 内部的每个 Action 都会从实体的管理器中调用一个或多个方法。我总是尽量避免直接使用存储库的“魔术
    方法”,以支持定制方法:在操作内部,而不是调用
    $this->getDoctrine()->getRepository(<entity>)->findBy(array('parent' => null));

    我在存储库中创建此方法:
    public function findParents()
    {
    return $this->findBy(array('parent' => null));
    }

    在 Action 中,我使用:
    $this->getDoctrine()->getRepository(<entity>)->findParents();

    当然,这是一个简单的示例,但在更复杂的 findByfindOneBy查询中也能很好地工作。

    关于symfony - Symfony 2中的代码分离- Controller vs服务vs实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849104/

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