【问题标题】:Symfony2 bundles: am I using them right?Symfony2 捆绑包:我用对了吗?
【发布时间】:2013-08-30 19:49:27
【问题描述】:

我有一个在 Symfony2 中开发的应用程序。现在它的结构如下:

  • FrontBundle - 包括与应用程序的视图和 UI 相关的所有内容。
  • PersistanceBundle - 包括与应用的持久层相关的所有内容。
  • DomainBundle - 包括与应用程序实体和服务相关的所有内容。

这个结构好吗?或者像论坛功能一样使用捆绑包 - ForumBundle - 它包括每一层(控制器服务域逻辑持久性)与论坛相关。

【问题讨论】:

  • 我自己也遇到了同样的问题。我没有遇到 elnur 所说的捆绑包。所以我创建了自己的包(目前在 alptha),名为 best-practice-bundle,也可以通过 packagist 获得。我尝试遵循所有最佳实践,例如“目录树结构”和“编码标准”。希望对您有所帮助,非常欢迎反馈。

标签: php symfony


【解决方案1】:

对于如何使用 bundle 构建应用程序没有硬性规定,但这是我在 Symfony2 上开发近一年后得出的结论。

使用一个特定于应用程序的捆绑包。起初,我 started 使用多个捆绑包,例如 CommonBundleUserBundleMainBundleBlogBundleContactBundle 等。最后证明不是那么方便,所以我只切换到了一个特定于应用程序的捆绑包——AppBundle

您可以使用子命名空间整齐地组织您的代码。例如,后端控制器将转到 AppBundle\Controller\Backend 子命名空间。

请注意,我说的是一个特定于应用程序的包——这些东西是具体应用程序所独有的,在其他地方重复使用是没有意义的。您仍然可以为可重用的东西开发单独的捆绑包,并将它们放入供应商的基础架构中。

将非 Symfony 特定的东西排除在包之外。 如果模型和 Service Layer 类不是 Symfony2 特定的,则不需要将它们放在包中。有关详细信息,请参阅this question 和我的回答。

【讨论】:

  • "将非 Symfony 特定的东西放在包之外。"那该放在哪里呢?
  • src/MyVendor/Model 甚至vendor/MyVendor/Model 中,并将这些命名空间添加到自动加载器中。
【解决方案2】:

就像 Elnur 所说,使用一个 AppBundle 是一种很好的做法。

一个单独的包自己实现了 MVC 模式,所以我认为使用包来分离你的层不是一个好主意。

我认为使用捆绑软件的最佳方式是考虑“开源”。如果您正在开发的功能足够通用,可以为每个人发布,或者可以在未来的项目中重用,请将此功能放在一个捆绑包中。 这种方式将迫使您在没有属于您的 AppBundle 的任何业务规则的情况下构建功能。

捆绑包是砖块

【讨论】:

    【解决方案3】:

    有多种方法可以为您的项目组织应用程序结构。但是如果你想分发你的 bundle 并遵循 symfony 的最佳实践,那么 bundle 是比 UI 分离更多的特性。在documentation 中阅读有关捆绑包的更多信息。

    我有两个具有以下结构的项目,我认为都是有效的:

    1. 为每个功能制作一个捆绑包:BlogBu​​ndle、StoreBundle 等, 和包含一般内容的 AppBundle。没有后端/前端 分离。在大多数情况下,它是后端即前端的 SaaS。
    2. 一个用于前端,一个用于后端。他们只共享实体 和特定领域的东西。应用程序有两个不同的端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2012-02-19
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多