如何在不破坏任何代码的情况下从旧的 PHP 数据库处理程序库迁移到 PDO?
How to migrate from old PHP database handler library to PDO without any code breaking?
我为我的项目使用了 AdoDb
数据库处理程序库,现在我想迁移到 PDO
但我不希望整个项目停止工作我该怎么办?
我使用了该处理程序的大约 10 种方法(并且使用了同样有效的简单查询 PDO
)所以我找到了两个解决方案:
1- 扩展 PDO
class 并向其添加 AdoDB
方法签名并修复它以使用 PDO
.
2- 包装 PDO
class 并添加这些方法。
最好的解决方案是什么,我应该考虑这样做吗?
那么,您的问题是关于扩展或包装的。通常最好不要扩展您不拥有的 classes。例如,PDO class 中的任何更改都可能无法预料地破坏您的扩展 class。您无法控制更改。因此,由于您不拥有 PDO class 我建议将其包装起来。
但是请确保您使用了 PDO class 的所有优势。否则你只会让你的代码更复杂,而没有任何改进。
您对这个项目有任何 functional/browser 测试吗?如果是这样,将项目复制到您的开发机器,然后将每个 AdoDB 调用修改为等效的 PDO,并重复直到您的测试通过。
确实,您可以将 PDO 修复为看起来像 AdoDB,但只有在您认为需要的方法完全映射到 PDO 时才这样做。修复所有用例应该非常快,因为您可以在项目中进行全局搜索。
如果您对此项目没有任何功能测试,请考虑编写一些 - 它们会帮助您确信在进行此类大规模重构时您没有破坏某些东西。当然,您应该对项目中的每个操作进行测试,因此通常情况下,更多测试 = 更好地防止回归。
我为我的项目使用了 AdoDb
数据库处理程序库,现在我想迁移到 PDO
但我不希望整个项目停止工作我该怎么办?
我使用了该处理程序的大约 10 种方法(并且使用了同样有效的简单查询 PDO
)所以我找到了两个解决方案:
1- 扩展 PDO
class 并向其添加 AdoDB
方法签名并修复它以使用 PDO
.
2- 包装 PDO
class 并添加这些方法。
最好的解决方案是什么,我应该考虑这样做吗?
那么,您的问题是关于扩展或包装的。通常最好不要扩展您不拥有的 classes。例如,PDO class 中的任何更改都可能无法预料地破坏您的扩展 class。您无法控制更改。因此,由于您不拥有 PDO class 我建议将其包装起来。
但是请确保您使用了 PDO class 的所有优势。否则你只会让你的代码更复杂,而没有任何改进。
您对这个项目有任何 functional/browser 测试吗?如果是这样,将项目复制到您的开发机器,然后将每个 AdoDB 调用修改为等效的 PDO,并重复直到您的测试通过。
确实,您可以将 PDO 修复为看起来像 AdoDB,但只有在您认为需要的方法完全映射到 PDO 时才这样做。修复所有用例应该非常快,因为您可以在项目中进行全局搜索。
如果您对此项目没有任何功能测试,请考虑编写一些 - 它们会帮助您确信在进行此类大规模重构时您没有破坏某些东西。当然,您应该对项目中的每个操作进行测试,因此通常情况下,更多测试 = 更好地防止回归。