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

时间:2012-02-15 14:36:56

标签: c# java oop dependency-injection dependencies

所以这是我的问题:

例如,考虑一下:

File有一组Classes,以及Imports

Class有一组Instance MethodsStatic MethodsVariables

Instance MethodParametersBody

Body有...... yadayada。

当以OO方式对此进行建模时,问题是Body可能需要很多特定的依赖项来运行:

class Body {
    ...

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

    ...
}

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

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

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

3 个答案:

答案 0 :(得分:4)

Body实现IBody界面,让InstanceMethod仅依赖于IBodyIEnumerable<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并将其一直传递下去。

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