所以这是我的问题:
例如,考虑一下:
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
,但问题仍然是一样的,因为我必须通过BodyFactory
到File
,Class
和{{ 1}},如果我没有遗漏任何东西。
如何在不诉诸单身人士的情况下解决这个问题?
答案 0 :(得分:4)
让Body
实现IBody
界面,让InstanceMethod
仅依赖于IBody
和IEnumerable<IParameter>
(如果我们假设C# - 在Java中它将是一个不同命名的集合接口,但原理是相同的。)
将refactoring to Facade Services的这一过程一直重复到Composition Root,然后您可以compose the entire object graph这样:
File file = new File(
new List<IClass>
{
new Class(
new List<IInstanceMethod>
{
new InstanceMethod(
new List<IParameter>(),
new Body(
new Dependency1()
new Dependency2(),
new DependencyN()))
},
new List<IStaticMethod>(),
new List<IVariable>())
},
new List<IImport>());
答案 1 :(得分:0)
您似乎在梦想注射框架的种类。例如Spring Framework。
答案 2 :(得分:0)
就Java而言,我不认为你有一个解决方法,如果一个方法需要n个参数,那么你将不得不传递它们,所以你将不得不一直携带它们,使这个更优雅的解决方案是创建一个DataWrapper,称之为BodyBean并将其一直传递下去。
然后你有另一个选择不使用参数,那么如果这些人是单身人士,只需注入它们,顺便提一下我会推荐你