【发布时间】:2018-05-15 15:02:52
【问题描述】:
在Symfony Best Practices中建议不要使用bundle来组织业务逻辑。
只有在其中的代码打算在其他应用程序中按原样重用时才应使用捆绑包:
但捆绑包是指可以重复使用的东西 一个独立的软件。如果 UserBundle 不能“按原样”使用 其他 Symfony 应用程序,那么它不应该是它自己的包。
所以,当我将我的应用程序从 Symfony 3.3 升级到 Symfony 4 时,我认为这是重新组织我的代码的正确时机。
目前我遵循“捆绑结构”:
- src
- AppBundle
- Controller
- Entity
- Repository
- Resources
- ...
- MyNamespace
- Bundle
- BundleTodo
- Controller
- Entity
- Repository
- Resources
- ...
- BundleCatalog
- Controller
- Entity
- Repository
- Resources
- ...
- BundleCart
- Controller
- Entity
- Repository
- Resources
- ...
- ...
现在,有了新的目录结构,我应该如何组织我的代码?
我想这样组织它:
-src
- Core
- Controller
- Entity
- Repository
- ..
- Todos
- Controller
- Entity
- Repository
- ..
- Catalog
- Controller
- Entity
- Repository
- ..
- Cart
- Controller
- Entity
- Repository
- ...
但是,这是正确的吗? Symfony 4 和 Flex 的预期文件夹结构有什么问题吗?
或者像这样更好:
-src
- Controller
- Core
- Todos
- Catalog
- Cart
- ...
- Entity
- Core
- Todos
- Catalog
- Cart
- ...
- Repository
- Core
- Todos
- Catalog
- Cart
- ...
- ...
这同样适用于project directory structure 中描述的其他根文件夹(关于如何覆盖它)。
在决定我的新文件夹结构时是否需要考虑任何规则或限制?
尝试解决问题
所以,为了解决这个问题,我会更深入地研究文档,我会在这里写下我会发现的。
- 控制器:使用fine grained configuration of controllers。
- 树枝:
- 实体:使用
orm.entity_managers.some_em.mappings.mapping_name
【问题讨论】:
-
没有正确的答案,这个问题如山之水。 Symfony 在某种程度上倾向于第二种方法,即开箱即用,控制器目录下的所有类都被视为控制器。同样,实体下的任何内容都可以视为实体。但是不要让框架支配你的应用程序设计。我更倾向于第一种方法,但一旦你深入了解细节,你可能会发现自己还有很多其他类型的类。
-
@Cerad,必须存在正确答案。正如您所指出的,Symfony 在某种程度上倾向于第二种方法,将
controller文件夹中的所有类视为控制器,entity文件夹中的实体,等等。所以,这已经是使用第二种方法的好点了。问题比我描述的更深:有表单类型、序列化程序类和更多“东西”,如果放在一个文件夹而不是另一个文件夹中,它们就会获得特定的含义。 -
确实框架不应该规定任何东西,但是如果我选择使用一个,我必须按照它告诉我的去做,而不是选择一个不同的框架或者干脆不使用它的“高级”功能(我想使用它们)......
-
是的。如果每件事都只有一个正确的答案,那么生活会简单得多。问题是 Symfony 可以通过非常小的配置更改来支持多种方法。细节是让事情变得混乱的原因。正如您在评论中提到的,必须考虑表单、视图、业务逻辑等。我喜欢你的第一种方法,除了我经常有相关的“嵌套”功能而且我很少根据对象类型创建目录。 Symfony 很好地处理了这种方法。
-
“我很少根据对象类型创建目录”:这句话是什么意思?能给我举个例子吗?无论如何,我会更深入地研究文档,我正在寻找一些解决方案......我将更新我的问题......