使用IOC容器会降低应用程序的速度,因为大多数都使用了引擎盖下的反射.它们还会使您的代码更难理解(?).光明的一面; 它们可以帮助您创建更松散耦合的应用程序,并使单元测试更容易.使用/不使用IOC容器还有其他优缺点吗?
如果您以简单的方式使用IOC容器,则仅在启动时使用反射 - 应用程序连接起来开始,然后它正常运行而无需容器的任何干预.当然,如果您在开始运行后使用IOC来解决依赖关系,那可能会略有不同 - 尽管我仍然期望它可以懒惰地解析并缓存,除非您已将其配置为每个都创建新实例时间.
至于使代码更难理解 - 恰恰相反!通过明确声明依赖关系,可以更容易地理解每个组件,并且配置文件清楚地表明整个应用程序如何挂起.
好吧,我想我经历的一个问题是,一些开发人员似乎无法掌握IoC.我们有几个人除了他们不理解他们之外没有任何理由反对它.(并不是说这是反对某事的坏理由,完全没有.)
它确实增加了一些似乎总是让某人或其他人感到困惑的抽象,但我认为在大多数情况下,优点远远超过缺点.
我认为,如果您对如何使用IOC有专业的理解并且倾向于编写好的代码,那么可以说是公平的,那么IOC将使您的代码更容易理解除了最小的系统.
但是,如果您在大多数类/方法非常庞大并且重构概念尚未成熟的地方工作,那么尝试使用IOC可能只是为了让软件更难理解.国际奥委会也必须由项目所有人参与,因此可能需要考虑.
我认为国际奥委会是锦上添花; 我喜欢结冰,但只喜欢美味的蛋糕.如果蛋糕不好开始,先把蛋糕整理出来.
至于使用IOC的性能开销,在大多数情况下我不认为这是一个问题.开销不需要很大,并且考虑到当今CPU的速度,大多数运行时间可能仍然是数据访问.如果国际奥委会证明减缓对代码我想看看添加返回对象的一些缓存,或移除国际奥委会给定的位刚刚从代码位.