【发布时间】:2011-08-30 23:40:02
【问题描述】:
这是为这篇文章制作的一个通用的虚构示例。考虑 6 个类
TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger.
TableFactory 是外部类,假设它包含一个 DB 表的 TableData 对象。
在此TableFactory 中,没有对TableSchema 或DBConnect 或logger 的调用。我的目标是外部范围不需要的内部对象的示例。
TableData是对数据的内部获取和操作,所以需要TableCrud、DBConnect和Logger。
TableCrud 包含TableSchema 并需要DBConnect 和Logger。
DbConnectitseld,为了让事情变得有趣,需要一个 Logger。我的示例现在是 3 个作用域深度。
我的问题很简单,如果您有一个对象 3(或更多)范围内的对象不被外部范围内的对象调用,如何在不破坏接口的情况下将这些对象从外部范围发送到内部范围隔离原则 -> TableFactory 不应该处理内部对象所需的 DBConnect 或 Logger。
如果一个人尊重基本的 OOP 原则并以易于测试为目标 -> 您将拥有需要注入 5 个对象的外部对象,然后使用 getter 方法将所需的对象传递给更进一步的链。而内部作用域对象反过来需要注入其内部 3 作用域深度对象的依赖项,这些对象也需要使用 getter。这使得外部作用域对象需要许多依赖项,而 getter 只是为了传递这些依赖项。
这种对象传递方法是否有替代方法,我在此过程中错过了一些东西?请分享!任何链接/cmets 表示赞赏。
【问题讨论】:
标签: php unit-testing dependency-injection dependencies