将一组依赖项深深嵌套在依赖关系图中
所以这是我的问题:
例如,考虑一下:
File
有一组Classes
,以及Imports
。
Class
具有一组Instance Methods
, Static Methods
和Variables
。
Instance Method
具有Parameters
和Body
。
Body
有… yadayada。
在以OO方式对其进行建模时,问题是Body
可能需要许多特定的依赖项才能运行:
class Body { ... public Body(Dependency1, Dependency2, Dependency_n, ...) { } ... }
运行时所有其他类都不需要。 我在这里提出的问题是如何将这些依赖项添加到Body
而不必通过File
, Class
和InstanceMethod
传递所有这些依赖项。
我可以创建一个BodyFactory
,但问题仍然是一样的,因为我必须通过File
, Class
和InstanceMethod
传递BodyFactory
,如果我没有遗漏任何东西。
如何在不诉诸单身的情况下解决这个问题?
让Body
实现一个IBody
接口,让InstanceMethod
只依赖于IBody
和IEnumerable
(如果我们假设C# – 在Java中它将是一个不同命名的集合接口,但原理是相同的)。
重复这个重构到Facade Services的过程一直到Composition Root ,然后你可以在这里组成整个对象图,如下所示:
File file = new File( new List { new Class( new List { new InstanceMethod( new List(), new Body( new Dependency1() new Dependency2(), new DependencyN())) }, new List(), new List()) }, new List());
看来你正在梦想注射类型。 例如Spring Framework 。
就Java而言,我不认为你有一个解决方法,如果一个方法需要n个参数,那么你将不得不通过它们,所以你将不得不一直携带它们,一个解决方案使这更优雅的是创建一个DataWrapper,将其称为BodyBean并将其一直传递下去。
然后你有另一种选择不使用参数,那么如果这些人是单身人士,只需注入它们,这顺便是我推荐你的选择