我有一个类A取决于其他10个类。根据依赖注入模式,我应该通过构造函数传递A的所有依赖关系。依赖注入 - 当你有很多依赖关系时该怎么办?
所以,让我们假设这个构造函数(当然这不是一个工作或真正的代码,因为我不允许张贴在这里真正的代码)
public ClassA(ClassB b, ClassC c, ClassD d, ClassE e, ClassF f, ClassG g, ClassH h, ClassI i) {
this.b = b;
this.c = c;
this.d = d;
this.e = e;
this.f = f;
this.g = g;
this.h = h;
this.i = i;
}
我已经阅读Martin Fowler的书关于重构说具有很多参数的方法是一种代码味道,不应该发生。
我的问题是:当我们谈论DI时,这可以吗?在不破坏Martin Fowler的规则的情况下是否有更好的注入依赖关系的方法?
我知道我可以通过属性传递依赖关系,但这可能会导致错误,因为没有人确定应该传递什么以便类能够工作。
编辑
感谢您的答案。现在我将试图证明一些A级依赖性:
1 - 类访问DB
2 - 另一类访问另一个DB(是的,我需要对两个数据库进行操作)
3 - 一类通过电子邮件
4发送错误通知 - 甲类加载配置
5 - 一类,将作为计时器对某些操作(也许这一个可避免)
6 - 与业务逻辑的类
还有很多其他的我想摆脱,但那些是r基本上是必要的,我没有看到任何避免它们的方法。
EDIT
一些重构后现在我有7依赖性(从10向下)。但是,我有4个DAO
对象:
CustomerDAO
ProcessDAO
用ProductsDao
的CatalogDAO
是否正确就创建一个名为MyProjectDAO另一个类,并注入那些DAOS到了吗?这样我将只有一个DAO类来聚合我的项目的所有DAO对象。我不认为这是一个好主意,因为它违反了单一责任原则。我对吗?
[Dependency Injection Constructor Madness](http://stackoverflow.com/questions/2420193/dependency-injection-constructor-madness) – 2012-03-13 16:24:30
当您使用某种ORM时,可能会将所有4个DAO替换为UnitOfWork对象。 – Firo 2012-03-13 17:15:19