【问题标题】:How to upgrade a Symfony 3 bundled application to a Symfony 4 bundle-less one?如何将 Symfony 3 捆绑应用程序升级到 Symfony 4 无捆绑应用程序?
【发布时间】:2018-06-01 23:46:54
【问题描述】:

Upgrading Existing Applications to Flex 部分,Symfony 4 文档指出:

  1. 将原始源代码从 src/{App,...}Bundle/ 移动到 src/ 并将每个 PHP 文件的命名空间更新为 App\...(高级 IDE 可以自动执行此操作)。

第一部分“将原始源代码从src/{App,...}Bundle/移走”很清楚。我们可以这样理解目录结构:

sf3-project/
├── src/
    ├── AppBundle/
        ├── Controller/
            ├── MyFirstController.php
            └── MySecondController.php
        └── ...
    └── ApiBundle/
        ├── Controller/
            ├── MyFirstController.php
            └── MySecondController.php
        └── ...

但是,第二部分 " 到 src/ 并将每个 PHP 文件的命名空间更新为 App\..." 我不清楚,尤其是关于建议的结构。

据我了解,建议将每个Controller/ 目录的内容复制到一个目录中。如果是这样,如何处理具有相同名称的控制器?我们应该添加以前一个包的前缀作为名称的子目录吗?

symfony demo project 似乎暗示了它,因为Controller/ 下的Admin/ 目录。

我们应该如何将之前的目录结构升级为以下?

sf4-project/
├── src/
    ├── Controller/
    │    └── ...
    ├── ...
    └── Kernel.php

我们可以注意到这个 sf4-project 示例遵循 逐层封装 结构,就像在文档中一样。我也想知道我们是否可以轻松地使用 按功能包 结构。

那么,Symfony 4 对于按层封装按功能封装结构的建议方法是什么?

【问题讨论】:

  • 这个问题已经被问过很多次了,没有明确的答案。我要说的一件事是确保在你投入并重构所有内容之前获得某种明显的好处。捆绑方法在 S4 上仍然可以正常工作。
  • @Cerad,这个问题在哪里已经被问过了(我猜它不在 SO)?你能分享一下吗?即使没有明确的答案,阅读它也可能很有趣。谢谢。

标签: php symfony architecture symfony-flex


【解决方案1】:

Symfony 和捆绑包

Symfony 2 提到“Bundles 是 symfony 框架中的一等公民”。所以这是一个有点固执己见的框架,其中所有东西都是捆绑包,甚至是你的应用程序。

后来的良好实践建议捆绑包应该只是应用程序的可重用组件,但我们继续使用捆绑包来组织代码。

这导致许多开发人员不断地重复默认捆绑包结构,而忽略了对他们更有效的方法。仅仅因为它可以帮助您不必考虑架构,您运行一个命令并生成所有文件夹结构和控制器。

如果您查看(设计良好,与其他框架兼容)symfony 包,您会发现它们至少有 2 个包。一个包含代码、类、服务等,另一个包在 symfony 中配置所有这些。示例:Doctrine、jms/serializer、KnpMenu 等

捆绑更少的 symfony

我相信转向更少捆绑的 symfony 的目标是:

  • 与其他框架的简单重用性:Laravel、Silex?、Zend
  • 让您思考并为您尝试解决的项目设计最佳架构

因此,从 Symfony 捆绑包中移出以准确复制 symfony 新版本作为默认/演示架构所具有的内容对您毫无帮助。

我的建议是:忘记 Symfony 4 的默认/推荐设置

规划您应该如何组织代码:定义您的包和库以及将代码放置在何处,以使其易于开发、维护和测试。

尽量减少包和库之间的依赖关系。

决定你自己的权衡,然后如果你需要重构就去做。

如果您不想规划自己的架构,或者想稍后再做,请不要重构它。

查看关于软件架构的 Uncle Bob 视频:https://www.youtube.com/watch?v=HhNIttd87xs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 2018-05-05
    • 2018-05-15
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多