这是一篇由这篇文章组成的通用虚构示例.考虑6个班级
TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger.
Run Code Online (Sandbox Code Playgroud)
TableFactory是外部类,假设它拥有TableDataDB表的对象.
在这里TableFactory,没有呼叫TableSchema或DBConnect或logger.我的目标是在外部范围内不需要的内部对象的示例.
TableData是一个内部提取和操作数据,所以它需要TableCrud,DBConnect和Logger.
TableCrud 包含TableSchema和需要DBConnect,和Logger.
DbConnectitseld,为了让事情变得有趣,需要一个Logger.我的例子现在是3个范围深.
我的问题非常简单,如果你有一个对象3(或更多)范围,外部范围内的对象没有调用,那么如何在不破坏接口隔离原则的情况下将这些对象从外部范围发送到内部范围 - > TableFactory shouldn不得不处理内部对象所需的DBConnect或Logger.
如果一个人尊重基本的OOP原则并且目标是易于测试 - >你将需要注入5个对象的外部对象,然后使用getter方法来传递链上需要的对象.而内部范围的对象反过来又要求注入其内部3范围深度对象的依赖关系,并为这些对象注入getter.这使得外部作用域对象需要许多依赖项,而getter只是为了传递它们.
是否有替代这种对象传递方法,我一路上错过了什么?请分享!任何链接/评论赞赏.