bpa*_*lla 15 php tdd unit-testing dependency-injection
我正在开发一个具有相当大的PHP代码库的新项目.该应用程序使用了很多PHP常量(define('FOO', 'bar')),特别是对于像数据库连接参数这样的东西.这些常量都在一个配置文件中定义,该文件require_once()基本上直接由应用程序中的每个类组成.
几年前,这将是完全合理的,但从那以后我得到了单元测试错误,这种类之间的紧密耦合真的很困扰我.这些常量闻起来像全局变量,它们在整个应用程序代码中直接引用.
这还是个好主意吗?将这些值复制到一个对象并使用这个对象(即一个Bean,我说它)通过依赖注入将它们传递给与数据库交互的类是否合理?我是通过这样做来击败PHP常量的任何好处(比如速度或其他东西)吗?
我正在考虑的另一种方法是创建一个单独的配置PHP脚本进行测试.我仍然需要想办法让测试中的类使用沙箱配置脚本而不是全局配置脚本.这仍然感觉很脆弱,但可能需要对整个应用程序进行较少的彻底修改.
在我看来,常量只应在两种情况下使用:
SECONDS_PER_HOUR).即便如此,我还是会重新考虑类常量是否更合适,以免污染常数空间.
在你的情况下,我会说常量不是一个好的解决方案,因为你会想要根据它们的使用位置提供替代值.
这些常量闻起来像全局变量,它们被直接引用[...].将这些值复制到对象中并通过依赖注入传达它们是否合理?
绝对!我会更进一步说甚至应该避免类常量.因为它们是公开的,所以它们暴露内部并且它们是API,因此您不能轻易地更改它们而不会由于紧密耦合而破坏现有应用程序的风险.配置对象更有意义(只是不要使它成为Singleton).
另见:
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |