将一组依赖项深深嵌套在依赖关系图中

所以这是我的问题:

例如,考虑一下:

File有一组Classes ,以及Imports

Class具有一组Instance MethodsStatic MethodsVariables

Instance Method具有ParametersBody

Body有… yadayada。

在以OO方式对其进行建模时,问题是Body可能需要许多特定的依赖项才能运行:

 class Body { ... public Body(Dependency1, Dependency2, Dependency_n, ...) { } ... } 

运行时所有其他类都不需要。 我在这里提出的问题是如何将这些依赖项添加到Body而不必通过FileClassInstanceMethod传递所有这些依赖项。

我可以创建一个BodyFactory ,但问题仍然是一样的,因为我必须通过FileClassInstanceMethod传递BodyFactory ,如果我没有遗漏任何东西。

如何在不诉诸单身的情况下解决这个问题?

Body实现一个IBody接口,让InstanceMethod只依赖于IBodyIEnumerable (如果我们假设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并将其一直传递下去。

然后你有另一种选择不使用参数,那么如果这些人是单身人士,只需注入它们,这顺便是我推荐你的选择