使用IOC容器有哪些优缺点?

Fos*_*smo 11 ioc-container inversion-of-control

使用IOC容器会降低应用程序的速度,因为大多数都使用了引擎盖下的反射.它们还会使您的代码更难理解(?).光明的一面; 它们可以帮助您创建更松散耦合的应用程序,并使单元测试更容易.使用/不使用IOC容器还有其他优缺点吗?

Jon*_*eet 19

如果您以简单的方式使用IOC容器,则仅在启动时使用反射 - 应用程序连接起来开始,然后它正常运行而无需容器的任何干预.当然,如果您在开始运行后使用IOC来解决依赖关系,那可能会略有不同 - 尽管我仍然期望它可以懒惰地解析并缓存,除非您已将其配置为每个都创建新实例时间.

至于使代码更难理解 - 恰恰相反!通过明确声明依赖关系,可以更容易地理解每个组件,并且配置文件清楚地表明整个应用程序如何挂起.

  • 使用IoC容器后,代码更容易理解.但是,在使用它之前,一些开发人员很难理解他们为什么需要它.它解决的复杂性问题通常不存在于玩具应用中. (4认同)

Sci*_*ist 7

好吧,我想我经历的一个问题是,一些开发人员似乎无法掌握IoC.我们有几个人除了他们不理解他们之外没有任何理由反对它.(并不是说这是反对某事的坏理由,完全没有.)

它确实增加了一些似乎总是让某人或其他人感到困惑的抽象,但我认为在大多数情况下,优点远远超过缺点.


Ian*_*ose 7

我认为,如果您对如何使用IOC有专业的理解并且倾向于编写好的代码,那么可以说是公平的,那么IOC将使您的代码更容易理解除了最小的系统.

但是,如果您在大多数类/方法非常庞大并且重构概念尚未成熟的地方工作,那么尝试使用IOC可能只是为了让软件更难理解.国际奥委会也必须由项目所有人参与,因此可能需要考虑.

我认为国际奥委会是锦上添花; 我喜欢结冰,但只喜欢美味的蛋糕.如果蛋糕不好开始,先把蛋糕整理出来.

至于使用IOC的性能开销,在大多数情况下我不认为这是一个问题.开销不需要很大,并且考虑到当今CPU的速度,大多数运行时间可能仍然是数据访问.如果国际奥委会证明减缓对代码我想看看添加返回对象的一些缓存,或移除国际奥委会给定的位刚刚从代码位.


Ant*_*lev 2

在大多数情况下,您甚至不会注意到性能损失,因为对于“单例”对象,所有初始化仅执行一次。我还认为,IoC 使理解代码变得不同:相反,IoC 风格的开发迫使您创建小的连贯类,这反过来又更容易理解。