锁定老帖子 主题:还是没有明白IoC的好处
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-11
age0 写道 jjx 写道 那是因为早期的mis比较原始,不考虑什么重用和定制,今年我的两个mis全部基于ioc,从两个项目的开发中,真正体会到ioc的好处,也经历了上面所说的,处处getObject到不用getobject的变化。 btw : 我用的ioc是自己用 vb6 实现的,仿spring.net context的实现,在vb6这种不特别oo的环境中,ioc会强迫你用oo去思考。如果你体会不到好处,再争论也是没有用的,因为从我的实践过程中,接受ioc相当是一场洗脑,在1个星期左右时间内,都相当困扰 实际上是你强迫自己去套ioc的概念,如果你把ioc换成factory,从factory的角度上去考虑系统设计,自然又会有另一番感悟。 我发现这个帖子实际上是无谓的争论,如果你不喜欢ioc提供的factory而一定要通过自己去做factory的话。 |
|
返回顶楼 | |
发表时间:2005-03-11
使用容器来管理对象的生命周期,而不是用我们自己的的Factory是有很大好处的。再比如,我们要将我们的无状态的业务对象全部做为单例实现,我们只需要修改配置
singleton="true"(默认就是)就行了,而用我们自己写的Factorty. 你是要让你的class每个都实现singleton pattern还是让你的Factory在pool一个instance呢?okey,你可以说我选择后者,我忽然又说我其中的一个Service不想做成singleton,呵呵,那么你的Factory有这么智能吗? ---当然你也可以做一个象Spring足够的强大的Factory. 使用Spring当然主要不是看上他的Factory功能.. 最后,一点个人的看法,使用类试spring的lightweight框架最多只能解偶,而业务代码的重用还是要靠业务建摸 |
|
返回顶楼 | |
发表时间:2005-03-11
哎。
你们争的根本就不是ioc。 不是说找到了一个万能的工厂就叫ioc。 所谓ioc,就是说,我不管你怎么组装我,我只是直接宣称我需要什么。 至于是用配置文件还是工厂,还是new,那都是跟ioc正交的另外的概念。 打个比喻,你要找女朋友,ioc的方式是直接大声喊一嗓子:我要一个20岁以下,胸围35以上的ppmm! 然后坐在家里等mm上门就是。 而你们争论的却是: 1。那个自己工作中认识的才是好mm。 2。熟人介绍的多好。范围广阿 3。你们都错了,张三婚姻介绍所最好,价钱便宜,量又足。 这三种可能都各有优势,另外也许还有很多我们暂时没有想到的匪夷所思的办法(比如,煮饭式)。对于一个ioc的设计,外围可以根据实际情况选择其中的一种甚至混合使用。 但是这三种方法和ioc根本就是两个不同范畴的概念。 说的我嘴皮子都起茧子了,还就是有人不明白,真让我灰心。 ![]() |
|
返回顶楼 | |
发表时间:2005-03-11
其实前面gigix 包括我也已经反复强调了
你用ioc,但没有getObject或GetBean,具体的业务代码中是没有ioc概念的。将ioc用到这样了再来讨论好处会更好些些 |
|
返回顶楼 | |
发表时间:2005-03-11
引用 我不管你怎么组装我,我只是直接宣称我需要什么。 好羡慕这种饭来张口衣来伸手的方式.好啊,大家都知道它好! 问题在于饭总要人来做阿!你不管.你的上一层也不管最后还是到fatory xml来管, 共产主义好!能不能实现呢? |
|
返回顶楼 | |
发表时间:2005-03-11
frankensteinlin 写道 引用 我不管你怎么组装我,我只是直接宣称我需要什么。 好羡慕这种饭来张口衣来伸手的方式.好啊,大家都知道它好! 问题在于饭总要人来做阿!你不管.你的上一层也不管最后还是到fatory xml来管, 共产主义好!能不能实现呢? 不管谁做饭都好,总之不是business object自己做,这样business object就可以随便移植。这么简单的道理都看不明白,是装傻还是抬杠? |
|
返回顶楼 | |
发表时间:2005-03-11
ajoo说的存概念性的IOC,
而具体使用哪个Framework时,仅仅有“我要什么“这个概念还不够。开发人员当然还是要关心 谁给我,给我的货质量怎么样..这也无可厚非... |
|
返回顶楼 | |
发表时间:2005-03-11
ajoo 写道 哎。
所谓ioc,就是说,我不管你怎么组装我,我只是直接宣称我需要什么。 ![]() 说反了吧,所谓ioc就是宣告老子就是大爷,无论你们想要什么都必须找我,不许另起炉灶。 |
|
返回顶楼 | |
发表时间:2005-03-11
引用 不管谁做饭都好,总之不是business object自己做,这样business object就可以随便移植。这么简单的道理都看不明白,是装傻还是抬杠? 真的么? 我需要一个组建A帮助我完成任务,但是我这个类只有方法method1需要这个组件,本来这A只定义在这个方法里面现在就要有三种选择: 1,扩大它的作用域,至少作为一个private 的变量 还得同时提供get set 方法,这似乎牺牲封装性(作用域尽量的小)。 2。做为方法的参数传入,打个比方有个check函数在某种条件下要sentmail()(这可能会调用某种组建完成这个任务,)但是为什么要上层知道有这么个组件呢?我只是要check这个userCode 阿!email 和我无关为什么还要传个mail的组件?,又是封装性被破坏了 3。可以用spring这种万能工厂阿,看又依赖它了吧?怎么new呢?肯定要调用她的接口和某些实现吧。(和自己的工厂区别不大) 就算我傻,请问有什么其它的解决方法? |
|
返回顶楼 | |
发表时间:2005-03-11
看出来楼上是否要表达这种意思呢?
其实,我们有时不需要: 一、 public class B{ private C comp; public B(C comp){ this.comp = comp; } public void someMethod(){ this.comp.sayHello(); } } 二、 public class B{ private C comp; public B(){ } public setComp(C comp){ this.comp = comp; } public void someMethod(){ this.comp.sayHello(); } } 而是,需要: 三、 public class B{ public B(){ } public void someMethod(C comp){ comp.sayHello(); } } |
|
返回顶楼 | |