【问题标题】:Where shall I put my business logic without mapping to a database in Symfony2?我应该把我的业务逻辑放在哪里而不映射到 Symfony2 中的数据库?
【发布时间】:2013-08-15 08:45:56
【问题描述】:

我在 Symfony2 中创建了一个包含我的 webapp 的包。在那里,我有一些映射到我的 MySQL 数据库的实体。它们位于Acme\MyBundle\Entities

现在我创建了一些辅助类,我不会只在MyBundle 中使用它们,所以我将它们外包到一个单独的包中(例如Acme\MyHelperBundle)。到这里一切都清楚了。

但是我究竟应该把业务逻辑文件放在哪里呢?我把它们放进去

  • Acme\MyHelperBundle\Entities
  • Acme\MyHelperBundle\Resources
  • Acme\MyHelperBundle\Resources\src
  • 或任何其他位置?

对于这些帮助类,什么是好的命名空间?

【问题讨论】:

  • 为什么不 Acme\MyHelperBundle\BusinessLogic ?
  • 如果这是好的做法?这就是我问的原因。

标签: symfony business-logic


【解决方案1】:

创建一个模型文件夹并在其中创建一个类,您可以在其中放置业务逻辑并创建该类的服务并在项目的任何地方使用该类。

【讨论】:

  • 那么模型文件夹是什么? src, Entity?你有什么建议?
  • 这完全取决于您。许多捆绑包只是在捆绑包的根目录下创建一个模型目录。
  • 如果我将 Class.phpMyBundle\Entity 移动到例如MyBundle\Resources\src 它说找不到课程。我将namespace Acme\MyBundle\Entity 设置为namespace Acme\MyBundle\Classes 并通过use Acme\MyBundle\Classes\MyClass 使用它,但它不起作用:(
  • 定义一个模型目录,然后在实体目录中定义实体并从您的模型类扩展。由于您是从模型类扩展的,因此最好的方法是使用 XML 或 YML 进行元数据(映射)。如果你想使用注释,你将不得不重写属性,在我看来,这违背了从模型类扩展的目的。
【解决方案2】:

我认为没有真正的规则。 如果您的助手类被声明为服务(我认为如果您想在所有捆绑包中使用它们),您可以创建一个 Manager 文件夹。因此,当我在捆绑包中并且有一个经理时,我知道我有一些可以在任何地方重用的逻辑。

这也取决于您在文件中放置的内容,但如果它是像 UserManager.php 这样的帮助程序,您可以在该帮助程序上创建一些新请求(并将其声明为服务),Manager 文件夹是一个好地方开始。

您可以在许多捆绑包中找到此文件夹管理器,例如 fosElasticaBundle

ps:对不起我的英语,我希望它足够清楚:)

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2012-05-13
    • 2011-06-28
    • 2013-12-09
    • 2021-09-18
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多