无捆绑 Symfony 4 中的单体结构
Monolith structure in bundle-less Symfony 4
我开始使用和测试 Symfony 4 进行主项目迁移。我习惯于被 Symfony 告知应该如何构建文件,但现在当没有更多的包时,我想知道如何构建巨大的单体应用程序。
立即扩展:~300 条路线、~70 个控制器、~90 个实体、~20 个包
services.yaml 应该是什么样子? - 我应该留在 App 命名空间还是我可以模拟捆绑包?每个组件的服务配置放在哪里?
服务和控制器应该如何在目录中分开? - 我应该选择 src/Service/{Something}/{Something}Manager.php
还是继续使用 src/{Something}/Service/{Something}Manager.php
并且不使用 Bundle关键词?为什么?
UserAuthenticationProvider and/or WebSocketServer 放在哪里?
首先,S4 仍然像以前一样支持捆绑包。配置部分已经进行了一些重组,但如果你已经有一个巨大的应用程序在捆绑包下工作,那么你可能只考虑或多或少地保持原样。它应该仍然可以正常工作,只需进行最少的调整。
无捆绑应用程序有几种方法。通常,您会使用功能子目录按功能对文件进行分组,以保持组织有序。
假设您有三个现有的包,分别称为 FooBundle、BarBundle、JarBundle
config
services
foo.yaml
bar.yaml
jar.yaml
routes:
foo.yaml
bar.yaml
jar.yaml
src
Controller
Foo
Foo1Controller
Foo2Controller
Bar
etc
Entity
Foo
foo entities
Bar
bar entities
Form
etc
templates
foo
bar
jar
你懂的。可能值得提前对这一切进行建模,特别是看看零碎可能适合的地方。并且可能对所有内容都使用 App 命名空间。这种方法几乎遵循了 Symfony 4 的最佳实践。真的不会错得太远。
至少还有一种方法可以按功能对文件进行分组。我不会详细介绍,因为它绝对不是正常的 Symfony 方法,并且需要进行一些调整。但你可以这样做:
src
Blog
routes.yaml
services.yaml
BlogEntity.php
BlogVoter.php
Edit
BlogEditController.php
BlogEditForm.php
BlogEditTemplate.html.twig
etc
Show
BlogShowController.php
etc
我为遗留单体应用程序制作了一组新的 REST API,但遇到了同样的问题。
我先回答这个问题:
服务和控制器应该如何在目录中分开?
我走 src/Service/{Something}/{Something}Manager.php
路,因为我认为那是路。随着项目的发展,我对此感到遗憾,并将移至 src/{Something}/Service/{Something}Manager.php
为什么?
- 我发现命名空间中的分隔更容易阅读,也更容易
更难不小心
use
错误 class.
- 我现在将文件拆分到整个应用程序中,很难将其抽象为一个可供其他应用程序重复使用的库。
- 我无法轻松重构功能 - 一切都分散在一个
交织在一起。如果我要转换一个整体,我宁愿有
重构受某些函数约束的代码,以便我可以继续工作
那,在移动到下一个之前。
还有其他原因,但觉得有必要在应用程序变大之前将其分离出来。
services.yaml 应该是什么样子? 好吧,自动装配太棒了。我会将您的服务 yaml 保留在各种功能拆分中(如上所述)并开始重构它们。使用默认的自动装配配置,您会发现几乎不需要显式定义。
UserAuthenticationProvider and/or WebSocketServer 放在哪里?
对于提供商,可能类似于 src/Security/Authentication/Provider/UserAuthenticationProvider.php
。
对于 WS 服务器,我不太确定 - 这取决于它在应用程序中的位置以及它的使用方式。
我开始使用和测试 Symfony 4 进行主项目迁移。我习惯于被 Symfony 告知应该如何构建文件,但现在当没有更多的包时,我想知道如何构建巨大的单体应用程序。
立即扩展:~300 条路线、~70 个控制器、~90 个实体、~20 个包
services.yaml 应该是什么样子? - 我应该留在 App 命名空间还是我可以模拟捆绑包?每个组件的服务配置放在哪里?
服务和控制器应该如何在目录中分开? - 我应该选择 src/Service/{Something}/{Something}Manager.php
还是继续使用 src/{Something}/Service/{Something}Manager.php
并且不使用 Bundle关键词?为什么?
UserAuthenticationProvider and/or WebSocketServer 放在哪里?
首先,S4 仍然像以前一样支持捆绑包。配置部分已经进行了一些重组,但如果你已经有一个巨大的应用程序在捆绑包下工作,那么你可能只考虑或多或少地保持原样。它应该仍然可以正常工作,只需进行最少的调整。
无捆绑应用程序有几种方法。通常,您会使用功能子目录按功能对文件进行分组,以保持组织有序。
假设您有三个现有的包,分别称为 FooBundle、BarBundle、JarBundle
config
services
foo.yaml
bar.yaml
jar.yaml
routes:
foo.yaml
bar.yaml
jar.yaml
src
Controller
Foo
Foo1Controller
Foo2Controller
Bar
etc
Entity
Foo
foo entities
Bar
bar entities
Form
etc
templates
foo
bar
jar
你懂的。可能值得提前对这一切进行建模,特别是看看零碎可能适合的地方。并且可能对所有内容都使用 App 命名空间。这种方法几乎遵循了 Symfony 4 的最佳实践。真的不会错得太远。
至少还有一种方法可以按功能对文件进行分组。我不会详细介绍,因为它绝对不是正常的 Symfony 方法,并且需要进行一些调整。但你可以这样做:
src
Blog
routes.yaml
services.yaml
BlogEntity.php
BlogVoter.php
Edit
BlogEditController.php
BlogEditForm.php
BlogEditTemplate.html.twig
etc
Show
BlogShowController.php
etc
我为遗留单体应用程序制作了一组新的 REST API,但遇到了同样的问题。
我先回答这个问题: 服务和控制器应该如何在目录中分开?
我走 src/Service/{Something}/{Something}Manager.php
路,因为我认为那是路。随着项目的发展,我对此感到遗憾,并将移至 src/{Something}/Service/{Something}Manager.php
为什么?
- 我发现命名空间中的分隔更容易阅读,也更容易
更难不小心
use
错误 class. - 我现在将文件拆分到整个应用程序中,很难将其抽象为一个可供其他应用程序重复使用的库。
- 我无法轻松重构功能 - 一切都分散在一个 交织在一起。如果我要转换一个整体,我宁愿有 重构受某些函数约束的代码,以便我可以继续工作 那,在移动到下一个之前。
还有其他原因,但觉得有必要在应用程序变大之前将其分离出来。
services.yaml 应该是什么样子? 好吧,自动装配太棒了。我会将您的服务 yaml 保留在各种功能拆分中(如上所述)并开始重构它们。使用默认的自动装配配置,您会发现几乎不需要显式定义。
UserAuthenticationProvider and/or WebSocketServer 放在哪里?
对于提供商,可能类似于 src/Security/Authentication/Provider/UserAuthenticationProvider.php
。
对于 WS 服务器,我不太确定 - 这取决于它在应用程序中的位置以及它的使用方式。