今天我就这个话题和网上一个朋友在QQ上进行讨论,讨论的观点属于个人观点不一定正确,如果发现有不当的地方请指出来(谢谢):
2004-09-21 10:07:35 小兵
我认为对于ejb的接口的评价不是很准确,它的设计主要不是为了本地的调用,更大的方向应该是对分布式环境的支持,这样的话它才有其意义。
个人认为ejb在国内的使用不是很正道,总是为了用而用,或者是为了某种商业目的。
2004-09-21 10:06:08 recher
首先我承认EJB开发目的:不是为了本地的调用,更大的方向应该是对分布式环境的支持.我只是举例子,如果说本地和远程接口的比较,我更反对本地接口--缺点就更多了,更明显了.对于分布式的问题可以用纯java的DTO(RMI)的机制实现你的问题,你注意了接口的编程是很好一种方式,我从不反对甚至我追求接口编程,但是我说的是EJB容器对的接口的实现和其在内部耦合关系的思路有问题.
2004-09-21 10:21:08 小兵
对于不同jvm也可以吗?这点我不是很了解。
你说的内部耦合有什么问题?在文章中没看到啊。
2004-09-21 10:20:12 recher
首先,你要清楚,IOC的机制是:---处理类之间和接口之间或类与接口之间关联关系,根据好莱坞原则,调用着与被调用者的主次关系,实现开关的原则.类之间可以很好(甚至)可以完全避免耦合,一个类只负责自己逻辑功能代码,如果想调用其它类告诉IOC容器去做(一种比较好的方式是根据配置文件来设定复杂关系),而不需要在代码上过多的编写.
2004-09-21 10:37:25 小兵
然后呢?
2004-09-21 10:34:53 recher
这样说吧:IOC应该用更流行的术语叫DI(Dependency Injection---依赖注入)看到这个名称你就知道他的功能
2004-09-21 10:46:02 小兵
我知道呀,我有看过这方面的资料
我只是不认同你说的ejb的接口的问题
2004-09-21 10:44:50 recher
EJB的问题并不是接口产生的,相反的一些好处也正是依靠面向接口的方式;EJB的缺陷在于它的内部实现机制的思路上.
2004-09-21 10:45:21 recher
正如板桥大哥说的:理解Spring/EJB 3.0之类先进技术,须首先掌握指导他们实现的先进的设计模式,再次证明:设计模式是 Java学习不可逾越的鸿沟,否则就会走向错误的方向。
2004-09-21 10:55:35 小兵
(2004-09-21 10:44:50) recher
EJB的问题并不是接口产生的,相反的一些好处也正是依靠接口的方式;EJB的缺陷在于它的内部实现机制的思路上.
你可否举例说说ejb的缺陷,并说说如何解决该缺陷呢?
2004-09-21 10:56:49 recher
我晚一点再说吧,EJB的缺陷最少有5种,每一种都来自实现机制.如果是代码或技术产生的问题对于EJB 来说就不叫缺陷只能说不足,因为容器商肯定可以解决.但是如果思路有问题,就要重构了,毕竟它的EBJ接口就必然体现它实现机制思路,正如板桥所说EJB委员会正以现代IOC思路机制来实现,到底变成什么样子?--我也想知道(更希望能为我们带来更好的实现方法).
2004-09-21 11:11:17 recher
EJB2.0的编程存在以下问题:1,不能实现测试驱动开发---可测试性极差。2,既然EJB的提供了LocaleHome的接口为什么还是在内部使用JNDI的机制呢。3,EJB容器的服务是强加的,不管发布在容器内的EBJ用不用到一些服务(例如安全,事务,等)都在监听,但是现在的一些机制已经实现谁要服务向IOC容器提出申请,IOC容器就可以对要得服务进行动态加载,IOC服务就像ClassLoad,当然也是可以实现缓存的机制和对象服务池的机制的.4,最要命的是现在2.0的机制根本上牺牲了OO,代码颗粒度很难或不能分得很细,就更不要说支持AOP了。5,性能的缺陷,其实在POJO的实现比EJB的实现快.6.这只是我的猜测:EJB的SessionBean的实现依靠了servlet的功能,如果真的是这样的话会引发一些逻辑层的生命周期放到表示层中的现象了。
2004-09-21 11:19:19 小兵
哦,你要说ejb的缺陷的话,那可多的是了,但我看你的问题应该是集中在如何调用这个环节上的,这也是你说的ioc所致力解决的问题--如何组装,如何提供服务。但在这个环节上ejb的做法也有其道理呀,顺便说说,ejb应该不是“EBJ属于IOC 的type2(set*和get*)类型和type3(constructor)类型”,应该是type1吧。
2004-09-21 11:22:45 小兵
你是用哪个容器来跟ejb容器比较的?这是你理想中的容器吗?
2004-09-21 11:19:13 recher
tyep1,是对象化;EJB在一些实现IOC应该支持type2和type3的,EJB的接口中还是存在一些反映支持IOC的类型.但是EJB还是以set*;get*.EJB解决内部关系的机制现在看来已经不具备优势.成了发展的绊脚石.缺陷和不足是不同的.坦白说现在还没有我理想容器出现,因为我永远不满足除非世界的需求一成不变。如果问我比较喜欢那一个,我现在会说:Spring---因为它比较绿色.关于Spring 又是一个很大讨论话题,以后再说它吧.
2004-09-21 11:29:46 小兵
type1不是:Interface Injection吗?
2004-09-21 11:27:17 recher
对阿,就是对象,JVM中Interface是没有实例的.只是用了Inteface来对外封装一层;----这就EJB的接口编程机制的一个值得提倡的事情.