Dependency injection 避免依赖携带

Dependency injection 避免依赖携带,dependency-injection,Dependency Injection,在编码时,我经常遇到以下模式: -一个方法调用另一个方法(很好),但是被调用/被调用的方法接受参数,因此在包装方法中,我传入参数。问题是,这种依赖可以持续下去。我如何避免这种情况(任何示例代码都值得欣赏) 谢谢您可以使用依赖项注入框架。Guice就是这样一个例子:请参见步骤1:不要将所有参数都作为单独的参数传递,而是将这些参数分组到一个类中,比如X 步骤2:向类X添加getter以获取相关信息。被调用方应该使用getter来获取信息,而不是依赖于参数 步骤3:创建类X继承的接口类。把所有的吸收器

在编码时,我经常遇到以下模式:

-一个方法调用另一个方法(很好),但是被调用/被调用的方法接受参数,因此在包装方法中,我传入参数。问题是,这种依赖可以持续下去。我如何避免这种情况(任何示例代码都值得欣赏)


谢谢

您可以使用依赖项注入框架。Guice就是这样一个例子:请参见步骤1:不要将所有参数都作为单独的参数传递,而是将这些参数分组到一个类中,比如X

步骤2:向类X添加getter以获取相关信息。被调用方应该使用getter来获取信息,而不是依赖于参数

步骤3:创建类X继承的接口类。把所有的吸收器都放在界面中(在C++中,这是纯的虚拟方法)。 第4步:使被调用的方法只依赖于接口。

由于它们不能(轻松地)进行单元测试,大多数开发人员选择将对象注入视图。由于视图(通常)不用于构造其他视图,因此这就是DI链的终点。您可能会遇到这样一个问题(我在ahwile中每遇到一次),即您需要以正确的顺序构造对象,特别是在使用像Unity这样的DI框架时,解决对象的尝试会死锁。您需要担心的主要问题是循环依赖性。为此,请阅读以下文章:


重构:引入参数对象

你有一组自然结合在一起的参数吗

用对象替换它们

parameter对象的优点是,如果添加/删除参数,传递它们的调用不需要更改


(根据您回答的上下文,我不认为IoC库或依赖项注入模式是您真正想要的)

仅仅因为较低层组件需要而传递参数是泄漏抽象的标志。将每个依赖项隐藏在接口后面通常会更有效

横切关注点(通常是传递参数的最常见原因)是


如果您使用具有拦截功能的DI容器,您可以利用这些功能非常有效地实现装饰器(有些人将其称为容器的AOP功能)。

您自己的代码示例也有助于使问题更清楚。