我想遵循 Sander Mak 的这篇文章的建议,它提倡使用传统的单体架构,使用模块而不是微服务,这在许多情况下不是一个好的选择:
https://www.oreilly.com/ideas/modules-vs-microservices
我对 Monolithic 与微服务进行了大量研究,得出相同的结论,即在许多情况下,Monolithic 仍然是最佳选择,并且可以通过更简单的方式实现相同的目标。微服务应该在真正极端和特定的情况下使用。
当然,一个好的模块化架构的实现在每种语言和框架中都是不同的。作者正在谈论 Java 9 以及它如何完全重新定义实现这种模块化架构的方式。
但是 Symfony 4 呢?在第 4 版之前,似乎正确的方法是使用 Bundle。但是从第 4 版开始,官方文档明确建议不要再这样做了:
https://symfony.com/doc/current/bundles.html
In Symfony versions prior to 4.0, it was recommended to organize your own application code using bundles. This is no longer recommended and bundles should only be used to share code and features between multiple applications.
但是我在文档中看不到现在正确的方法是什么!如果无法使用 Bundle,那么实现 Sander Mak 文章中定义的模块化架构的最佳实践是什么?
最佳答案
我是来自 Java 环境的我自己,但选择在 SF4/PHP-7.x 环境中编写我当前的应用程序。很多原因在这里一一列举,让我在 Laravel 5.x 之后选择了 SF4。
不要被 Symfony 4 和 5 的举动所困扰......我承认我并不总是了解他们所有的发展计划和营销策略,而且我在开始时对新的无应用程序定向发布感到沮丧。但本能地,也许是因为我没有其他选择,我努力尝试 SF4,并坚定地计划在 SF4 环境中加强我的应用程序模块化策略。
感谢 Sander Mak 关于 Modules vs Micro-services 的文章,它确认了我对模块化支持框架的需求,而不仅仅是微服务模块化功能。这里真正的利害关系是正确评估您希望作为模块实现的组织概念的类型和规模。模块化微服务肯定可以用于实现复杂的硬件、业务事件和详细的组织基础设施。但是代价高昂,并且需要大量资源来处理依赖关系和内部连接。
使用 SF4,虽然他们通常谈论微内核,或者构建您自己的微服务框架,但我认为他们提供了一个很好的单体平台,用于构建模块化业务应用程序。我承认与 java 环境相比 PHP OOP 的限制,使一些实现比预期更难,但最终,对于常规业务应用程序需求,SF4 框架和组件提供了一个很好的应用程序基础。
在深入探讨使用 SF4 进行模块化应用程序开发的最佳方式之前,我将分享我对 future 2 年 SF4 领导者愿景/路线图的理解:
当时间到了,并且您想与社区共享特定模块时,请检查以将外部环境所需的最小配置/参数发送回模块。
关于architecture - 如何使用 symfony4 实现模块化架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902106/