锁定老帖子 主题:阿Q:革命了,革命了!(也谈IOC的好处)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-18
gigix 写道 还掰您这“高档PC”呢。咱也不用说什么正置倒置,我就提一个问题。回头需要卖“中档PC”,你怎么办?再加一个class?需要卖“学生PC”,你怎么办?再加一个class?需要卖“老年PC”,你怎么办?再加一个class?需要卖“绿色PC”,你怎么办?再加一个class?别忘了,现在是细分人群炒作概念的年代,照您这做法,PC厂家每增加一个概念,您就得新建一个class,您这维护还不做死啊。
搞了这么久,原来ioc是讨论如何将配置控制映射到XML、数据库或者其他类型的配置方式上,跟系统设计一点关系都没有,所谓的解藕原来是将代码依赖切换到XML之类的依赖上去。 看来我说了这么多系统设计,原来是瞎忙乎。 |
|
返回顶楼 | |
发表时间:2005-03-18
age0 写道 gigix 写道 还掰您这“高档PC”呢。咱也不用说什么正置倒置,我就提一个问题。回头需要卖“中档PC”,你怎么办?再加一个class?需要卖“学生PC”,你怎么办?再加一个class?需要卖“老年PC”,你怎么办?再加一个class?需要卖“绿色PC”,你怎么办?再加一个class?别忘了,现在是细分人群炒作概念的年代,照您这做法,PC厂家每增加一个概念,您就得新建一个class,您这维护还不做死啊。
搞了这么久,原来ioc是讨论如何将配置控制映射到XML、数据库或者其他类型的配置方式上,跟系统设计一点关系都没有,所谓的解藕原来是将代码依赖切换到XML之类的依赖上去。 看来我说了这么多系统设计,原来是瞎忙乎。 这还没说到IoC呢,咱们不妨另开一个帖单聊您这“系统设计”。现在嘛,我就但愿您不是项目的主设计师,不然就您这系统设计不知道得坑多少人。一堆人都得跟着您这做“高档PC”的class。 |
|
返回顶楼 | |
发表时间:2005-03-18
gigix 写道 frankensteinlin 写道 你就factory自己修改一下不久行了,指责不要太清楚哦!我才不管是远程的datasource还是本地的呢。
那么好了,我在生产环境要用JNDI取下来的datasource,在测试环境要用本地的datasource,那么这个factory我是不是要写两套,分别用在生产环境和测试环境?datasource你这么搞,transaction context是不是也要这么搞?message queue是不是也要这么搞?然后你要换一个环境,就要改七八个工厂的配置,你累不累? 你修改xml 我修改class 有什么区别? |
|
返回顶楼 | |
发表时间:2005-03-18
frankensteinlin 写道 gigix 写道 frankensteinlin 写道 你就factory自己修改一下不久行了,指责不要太清楚哦!我才不管是远程的datasource还是本地的呢。
那么好了,我在生产环境要用JNDI取下来的datasource,在测试环境要用本地的datasource,那么这个factory我是不是要写两套,分别用在生产环境和测试环境?datasource你这么搞,transaction context是不是也要这么搞?message queue是不是也要这么搞?然后你要换一个环境,就要改七八个工厂的配置,你累不累? 你修改xml 我修改class 有什么区别? 你说有什么区别呢?要是连这都没想明白,咱们可以再休息一会,等你想明白了再接着聊。 |
|
返回顶楼 | |
发表时间:2005-03-18
gigix 写道 还掰您这“高档PC”呢。咱也不用说什么正置倒置,我就提一个问题。回头需要卖“中档PC”,你怎么办?再加一个class?需要卖“学生PC”,你怎么办?再加一个class?需要卖“老年PC”,你怎么办?再加一个class?需要卖“绿色PC”,你怎么办?再加一个class?别忘了,现在是细分人群炒作概念的年代,照您这做法,PC厂家每增加一个概念,您就得新建一个class,您这维护还不做死啊。
您的ioc怎么做呢? 不写出“绿色PC“的定义行为,拿什么注射阿 |
|
返回顶楼 | |
发表时间:2005-03-18
frankensteinlin 写道 引用 ioc是违反OO封装原则的典型,将一个对象的内部构造暴露给外部并将该对象的建造推委给外部是危险及不负责任的 和我的想法一样。 A:我要买的是联想天翼电脑,能看碟片 上上网就行了?B:按照要求去找作。难道还要 B 自己部决定组件,还要问谁要?肯定是和A无关的! A{ new B(); b.do! } 不要告诉我 A{ B b set(B b) } 再让n Type 住射给A? A 连自己找到代理去买电脑的本事也没有,他还是个程序员么!it文盲阿 引用 你说有什么区别呢?要是连这都没想明白,咱们可以再休息一会,等你想明白了再接着聊。 想明白了你就假定A是个弱智,非得请各导师把找好代理告诉A,问题又来了,谁来告诉A,我找谁作导师a? 怎么听着像从前有座山,山上有座庙。。。 |
|
返回顶楼 | |
发表时间:2005-03-18
frankensteinlin 写道 gigix 写道 还掰您这“高档PC”呢。咱也不用说什么正置倒置,我就提一个问题。回头需要卖“中档PC”,你怎么办?再加一个class?需要卖“学生PC”,你怎么办?再加一个class?需要卖“老年PC”,你怎么办?再加一个class?需要卖“绿色PC”,你怎么办?再加一个class?别忘了,现在是细分人群炒作概念的年代,照您这做法,PC厂家每增加一个概念,您就得新建一个class,您这维护还不做死啊。
您的ioc怎么做呢? 不写出“绿色PC“的定义行为,拿什么注射阿 我都说八遍了,“绿色PC”、“高档PC”就是电脑上贴的一个标签,一个属性而已。你要把它变成一个类型,这就是OOD不及格。OOD先补习及格了,咱们再接着讨论IoC什么的。OOD没有及格,谈那些具体问题还为时过早。 |
|
返回顶楼 | |
发表时间:2005-03-18
好好的一个帖子,大家都集中精力讨论问题好不好?
说话不要绕弯,不要简单地假设人家是蠢货。 想把话说清楚的,就再努力努力,不要只会斗气! 再这么搞,我锁帖了。 |
|
返回顶楼 | |
发表时间:2005-03-18
被删了两贴!没办法谁叫咱们没名气,原来在网上也是不平等的!
怎么办,还想在这混下去就忍. 说的清楚点: 开始问题的范围。只有且只有两个参与者A -- B: A对B说我要buy能放dvd的电脑! B说300块钱我配置好给你。 于是: Class A:{ ..... b=new B();; 电脑:instance = b.get电脑(300); ........... } A 只和B打交道就卖到了电脑,作为主动方A只需要认识B就行了! 现在有人说这样不好要ioc 于是:Class A:{ private B :b //暂时不管用哪一种注射 ... 电脑:instance = b.get电脑(300); ........... } |
|
返回顶楼 | |
发表时间:2005-03-18
frankensteinlin 写道 Class A:{ private B :b //暂时不管用哪一种注射 ... 电脑:instance = b.get电脑(300); ........... } 上面的问题的语义似乎发生变化了: A说我要找符合B条件的代理,用300块钱弄台电脑!B在哪里找不到!没法买了! 怎么办:C 出现了,ioc的原则是尽量让A不依赖C,怎么办?C是导师么无所不知所以C负责拉郎配 让A和B匹配,于是A好像和C解耦了,问题又来B变得无所不知了C要知道A的构造方式,C要知道B的构造方式.于是C作为了A的大脑,C作为了B的大脑。C对A B都需要非常清楚 现在问题成了这样:有两个没有大脑的人 A B 在C 的帮助下买了台电脑!C说你不必思考,有我在呢! 现在再改一下 A找B买电脑B找c买主板C找D买显卡芯片D照E买螺蛳。。。 首先这儿的准确需求是:买一台300元的电脑 于是有接口 get_Computer_use_300(),然后具体实现注射进来 攒机的也好,买二手的也好,这已经不是A需要知道的了 如果需要买主板,显卡,接口挨个写出来不就完了?有问题么? frankensteinlin 写道 ioc 怎么办呢 主控xml 需要了解ABCD的所有的构造函数 并且知道这个过程需要用到ABCD。。。这些类。指责真的单一么? xml知道一切和类职责单一有矛盾么? |
|
返回顶楼 | |