我有一个在Symfony2中开发的应用程序。现在它的结构如下:
- FrontBundle - 包括与应用程序的视图和 UI 相关的所有内容。
- PersistanceBundle - 包括与应用程序的持久层相关的所有内容。
- DomainBundle - 包括与应用程序实体和服务相关的所有内容。
这个结构好吗?或者像论坛功能一样使用捆绑包 - ForumBundle - 它包括与论坛相关的每一层(控制器、服务、域逻辑和持久性)。
关于如何使用 bundle 构建应用程序没有硬性规定,但这是我在 Symfony2 上开发近一年后得出的结论。
使用一个特定于应用程序的捆绑包。起初,我从多个捆绑包开始,例如CommonBundle
, UserBundle
, MainBundle
, BlogBundle
,ContactBundle
等。最终证明不是那么方便,所以我只切换到一个特定于应用程序的捆绑包 - AppBundle
.
您可以使用子命名空间整齐地组织您的代码。例如,后端控制器将转到AppBundle\Controller\Backend
子命名空间。
请注意,我说的是一个特定于应用程序的捆绑包——这些东西是具体应用程序所独有的,在其他地方重复使用是没有意义的。您仍然可以为可重用的东西开发单独的捆绑包,并将它们放入供应商的基础设施中。
将非 Symfony 特定的东西放在包之外。如果模型和服务层类不是 Symfony2 特定的,则不需要在包中包含模型和服务层类。有关详细信息,请参阅此问题和我的答案。
就像 Elnur 所说,使用一个 AppBundle 是一种很好的做法。
一个单独的包自己实现了 MVC 模式,所以我认为使用包来分离你的层不是一个好主意。
我认为使用捆绑软件的最佳方式是考虑“开源”。如果您正在开发的功能足够通用,可以为每个人发布,或者可以在未来的项目中重用,请将此功能放在一个捆绑包中。这种方式将迫使您在没有属于 AppBundle 的任何业务规则的情况下构建功能。
捆绑是砖块
有多种方法可以为您的项目组织应用程序结构。但是如果你想分发你的 bundle 并遵循 symfony 的最佳实践,那么 bundle 是比 UI 分离更多的特性。阅读文档中有关捆绑包的更多信息。
我有两个具有以下结构的项目,我认为都是有效的: