yuxie
2005-12-12 16:19

人家这不是编程的基本原则吗

sorry,这里掉了一个说字

FreeTim
2005-12-13 00:21

我觉得用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的方法会不会淘汰呢,都是很有意思的猜想。

blueoxygen
2005-12-13 09:21

这玩意好象在csdn见过呢?

俺不愿意吹毛求疵,知道楼主怀疑的是IoC容器。

但是,题目是对IoC的疑问,那还是吹一下……没有容器就不能IoC了么?

楼主可能更多说的还是依赖注入吧。依照martin flower的定义。而IoC,很久以前,从终端机转向C/S时代就已经是一种控制反转。而面向接口编程更多的也是为了更加容易控制反转。其实没有用Spring Pico等的时候,大家无形中已经在控制反转的方式编程解耦了。

banq
2005-12-13 10:45

为了说明我的观点"使用Ioc模式进行编程,实际是走上一个全新的编程模式。",本站正好有一个帖子:

http://www.jdon.com/jive/thread.jsp?forum=91&thread=24127

这个帖子楼主觉得为便于JMock测试,更改代码结构后很不习惯,其实他不知道这正是基于Ioc模式的一个新的编程方式,对以前编程方式有所改变,不但面向接口,一个类对其他类的调用只要提供setXXX或构造参数即可,测试或运行的装配由相应的框架完成。

banq
2005-12-13 10:50

另外,纠正blueoxygen 的一句话:这玩意好象在csdn见过呢?

Ioc模式早期讨论是2004年在Jdon开始的,当然程序员杂志等媒体有些翻译文章,但是真正理解后讨论研究是在Jdon,看下面几篇文章:

Ioc模式

Pico、JMX、微容器以及对象的易管理性

看看这些文章的后面讨论,可见当时大家还是初次接触,甚至有人说我在“胡言乱语”。

当然,其他网站也可能在这个时期有讨论,这里不做引述。