在Symfony2项目中,您如何组织您的bundles?

8
我有跟这个人一样的问题:http://groups.google.com/group/symfony2/browse_thread/thread/cd35132cc6972f29 我就直接把问题复制粘贴在这里:
我想知道人们在项目中组织bundles的不同方式。
我似乎要么是为一个项目创建一个巨大的bundle,要么是创建很多与彼此紧密相关的(依赖)bundles。例如,我实现了自己的用户实体和登录表单等等,但是用户与组织(具有某些功能)相关联。等等...我猜主要是实体之间有很多重叠...
你们是将它们拆分开还是全部放在同一个bundle中?

1
这似乎可能会导致成为一个“讨论问题”。此外,没有一些具体的问题示例,很多答案同样有效。不同实体的组合可能会改变答案,例如:UserOrganisation(假设系统中还有其他依赖于Organisation的内容)- 不同的捆绑包。BlogPostBlogPostRevision - 相同的捆绑包。这在一定程度上是基于系统设计的直觉 - 捆绑包应该只封装您认为是连贯的某些功能。 - Kasheen
3个回答

15

编辑: 我现在不再将bundle用于特定于应用程序的代码.


个人而言,我喜欢按应用程序的每个部分拆分成一个bundle。例如:

  • UserBundle(用户相关功能)
  • BlogBundle(博客相关功能)
  • ForumBundle(论坛相关功能)
  • JobBundle(职位相关功能)
  • StoreBundle(商店相关功能)
  • 等等

如果应用程序是几个不同功能的混合体,并且没有一个足够大需要单独的应用程序或子域名,则这样做是可以接受的。但是,如果我正在开发一个大的网店应用程序,则我的bundles将更加具体:

  • UserBundle(用户相关功能)
  • ProductBundle(产品相关功能)
  • CartBundle(购物车相关功能)
  • SearchBundle(搜索相关功能)
  • WishlistBundle(愿望清单相关功能)
  • 等等

所以,我想说,这取决于项目的重点。对于一个项目的某个部分来说可能只是一个section,但对于另一个项目来说可能是核心功能。

我通常会拥有一个CommonBundle,其中包含所有常规的东西,如全局CSS、图像、布局等。

还有至少两个后端组织选项:

  1. 每个bundle都有自己的后端部分,或者
  2. 有一个大的后端bundle。

个人而言,我更倾向于第一种选择,您可以在我的以前的回答中了解更多信息,但也有人喜欢为整个后端单独创建一个bundle - 可能是使用其中之一的管理 bundles

顺便提一下,捆绑包之间互相连接是完全可以的,您不必让它们彼此独立。例如,JMSDiExtraBundle 依赖于 metadata 库和 JMSAopBundle,而这些库又依赖于 cg-library。如果您试图使捆绑包完全独立,最终会得到庞大的单一捆绑包代码。


非常感谢您的解释! - ggirtsou

6
对于每个项目,我都会先创建一个CoreBundle,在其中将所有内容放在一起。然后我只需在其中开发功能,随着时间的推移,我会重新评估它 - 如果我将来可能在其他地方使用这个功能(甚至发布到开源),我就会将其移动到新的bundle中。
“大小”适合单独bundle的功能并不重要 - 我曾经看过一个OS bundle与一个单独的js文件一样大:D
有一件事可以确定 - 将所有内容都塞在一个bundle中是不好的,这违背了为什么首先实施此体系结构的整个原因!

我也开始使用CoreBundle,除非项目很大,否则我们不需要创建太多的bundles... :) - ianaz

0

我在下面的主题中的回答可能会对你有所帮助:Symfony 2 : Location of Entities

虽然我不是Symfony2的专家,但我认为我对bundle设计有相当好的理解;当然,没有通用的答案,但你可以遵循一些“最佳实践”。

首先,我认为大型bundles不是一个好的解决方案;你不再像Symfony1.4那样将项目分成应用程序。你可能会问:“但前端/后端逻辑怎么办?”;非常简单,使用控制器!

每个bundle应该引用一个模块,是你项目中的一个组成部分。你必须划分你的应用程序;许多bundles并不是坏事。当然,不要为每个实体创建一个bundle,那将是浪费时间的。但想象一下一个博客应用程序:你会有一个用户bundle,文章bundle(它将管理帖子、类别等),最终可能还有一个静态页面的bundle,...

你的捆绑包被链接起来并不是不合逻辑;因为你正在构建整个应用程序,所以在这种情况下它们被链接了。但关键词在于“泛化”;你的捆绑包应该能够链接到其他捆绑包,而不仅仅是你自己的。你应该能够在其他项目中重复使用它。

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接