这是为这篇文章编写的一个通用的虚构示例。考虑6个班级
TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger.
TableFactory
是外部类,假设它拥有一个TableData
数据库表的对象。
In this TableFactory
,没有呼叫TableSchema
or DBConnect
or logger
。我的目标是提供外部范围中不需要的内部对象的示例。
TableData
是内部获取并操作数据,所以它需要TableCrud
, DBConnect
and Logger
.
TableCrud
包含TableSchema
和需要DBConnect
, and Logger
.
DbConnect
为了让事情变得有趣,它本身需要一个记录器。我的示例现在深度为 3 个范围。
我的问题非常简单,如果您有一个对象 3 个(或更多)范围,其中外部范围上的对象没有调用这些范围,那么如何在不违反接口隔离原则的情况下将这些对象从外部范围发送到内部范围 -> TableFactory 应该不必处理内部对象所需的 DBConnect 或 Logger。
如果尊重基本的 OOP 原则并以易于测试为目标 -> 您将拥有需要注入 5 个对象的外部对象,然后拥有将所需对象传递到链上的 getter 方法。内部作用域对象反过来需要注入其内部 3 作用域深度对象的依赖项,以及这些对象的 getter。这使得外部作用域对象需要许多依赖项,而 getter 只是为了传递这些依赖项。
这种对象传递方法是否有替代方法,这是我一路上错过的?请分享!任何链接/评论表示赞赏。