我觉得用IoC对设计一个具有很大的变数的系统很有用处,缺点是增加了系统的复杂性。
Acegi Security是一个典型的IoC程序,花了一个星期才弄清楚里面的运作原理,了解了里面各个部分插入之间的关系,而我要求的功能如果全部自己用传统的方法编程实现的话可能速度只要一两天,这是由于Acegi IoC粒度太细,极大的增加了系统的复杂程度和熟悉成本。
但另外一方面发现以前认为很复杂的几个需求用Acegi只需要插入几个简单实现的class即可实现,对于security这样的需求,每个系统根据业务的不同可能有不少的差别,用 IoC来实现的话才能满足通用的需求。所以对于code library,IoC是个重要的指标,缺少IoC就会失去很大的灵活性而失去很多用户。
我觉得IoC(这里主要是指Spring)的一个很大的缺点是application context configuration 缺少规范和指引。特别是那种非string的property, 如string to class 是通过一段什么asText程序来转换的,这里就会存在太多个人喜好和习惯,另外一个人可能要读完原来的程序才知道这个配置是什么意思。系统出了问题之后,需要叫来几个开发这个系统的所谓的“高手”在application ctx 里面飞快的打进几行字,系统才又开始工作。对比起来以前的那种jsp, php多简单,everyone knows how to fix a problem!
我同意楼上的说法,就是IoC将会给OO带来一些变革,现在的new instance的方法会不会淘汰呢,都是很有意思的猜想。