清洁代码 - 依赖注入

时间:2014-09-23 12:59:45

标签: constructor dependency-injection arguments code-cleanup

我想知道是否有更清洁的"使用依赖注入绑定到具有大量参数的类的解决方案,因为根据Robert C.Martin的清洁代码,最好不要使用超过3个参数......任何其他解决方案,想法(和例子?)

2 个答案:

答案 0 :(得分:4)

我的看法...... 无论您是使用构造函数参数还是常规参数,最好避免将许多参数作为参数传递。

即使是Robert C.Martin的清洁代码,也说最好不要超过3,这只是一个指导方针。实际上,由于原因可能需要超出此限制,因此可能会发生变化。例如,如果你有多个构造函数,有些确实很好地列出了参数,所以API可被发现 - 这也意味着参数列表永远不会改变。

但在大多数情况下情况并非如此,如果你有长参数列表,参数可能会改变并重新分解并变得更难。我使用数组或包含对象,因此更改只是该对象。

所以首选使用较少的参数3/4 max,但是如果你超越,则创建一个可以传递的对象。虽然这可以满足大多数情况,但有时您可能必须拥有长参数列表IMO。

答案 1 :(得分:4)

Dependency Injection != Lot of arguments

你要使用的参数数量取决于你的个人代码设计,DI你专注于你需要实现某些东西的依赖关系,你当然至少需要那些依赖关系,即使你没有编写一个类“依赖注入/ IoC模式”的术语。如果你有太多的论点,你可能不得不重新考虑你的设计。

如果您有疑问,请考虑维护性。

“如果我必须改变一些东西,它会在哪里改变?如果我做了那些改变,改变会触及多少其他地方?”

有一些可行的解决方法,仅举几例:

  1. 将2个或更多依赖项包装为新依赖项(很可能很高,当您需要多个依赖项时,您不需要这些依赖项的整个API,因此您可以将其中的一部分隐藏在新接口后面。)
  2. 正如Spock所说,你可以创建一个“参数”对象(留给你的实现:参数列表或对象结构)。
  3. 根据您的编程语言,您可能会发现某些解决方案比其他解决方案更有用(选项1可能更适合C ++等语言,其中每个依赖项可能会大量增加编译时间,而选项2似乎可能与像PHP这样的语言,因为用户需要更少的编码和工作量。)