我们正在考虑将一个我们积极维护的大型项目从 symfony1.4 迁移到 Symfony2。
这个应用程序使用 Selenium 在功能上进行了大量测试(单元测试几乎不存在 - Doctrine1/symfony1 并没有邀请我们做这些),我们希望以透明的方式逐步重新实现 Symfony2 中的功能,以便我们可以保持运行这些功能测试来验证我们没有破坏过程中的任何东西。
我们一直在寻找之前可能走同样道路的人的文章,以寻找关于最佳方法的想法,但有一部分我们没有看到任何建议或反馈,无论它是否容易、可能以及我们如何逐步重新实现我们的模型层,具体来说。
我的问题是,有没有人在 Symfony2 项目中使用过 Doctrine1 与 Doctrine2 并行?我们可以通过什么方式实现这一目标,我们应该期待什么问题?
为了增加上下文,下面是我们如何处理从 symfony1.4 到 Symfony2 渐进式重新实现应用程序的所有其他问题。
对于Controller,我们可以使用 Stefan Koopmanschap在这里描述的方法和相关的 Bundle 让未实现的路由透明地回退到 symfony1 项目。Maurits van der Schee 也对其进行了改进,提供了一种在两个应用程序之间共享身份验证和安全性的好方法。
对于Views,我们希望能够使用符号链接在项目之间共享“web/”资产,我们将开始将它们从 sf1 复制到 Sf2 并使用php作为临时模板引擎。
对于Model,我们可以让 Doctrine2 从原始 sf1 数据库生成样板,但是将 Doctrine1 Classes 中的 Model 中的所有业务逻辑重新实现为 Doctrine2 Classes 的过程预计会很费力,所以我们更愿意在一个渐进的方式,有时 Sf2 使用 Doctrine1 代码(如果尚未重新实现)并使用等效的 Doctrine2(如果已经重新实现)。
我们并不绝对需要它是自动的(这很好,但不确定它是否可行),控制器或其他模型类可能是决定在每种情况下使用 Doctrine1 还是 Doctrine2 的类。这是可以实现的吗?究竟如何?我们忘记了什么?什么是复杂的,什么是容易的?