这件事情同时又说明另外一个问题:
有人说:Struts+Spring+Hibernate是一种非常好的架构选择,我想,Hibernate创建人Gavin King可能不同意这样的架构选择是最完美的,否则,Gavin King不会再重新发明相同轮子,再次开发Seam。
Gavin King开发Seam是目的将那些被Rubby on Rails(RoR)吸引的程序员再次吸引回来,为什么认为能够吸引回来?前提是RoR肯定又不足之处(如将业务写在MVC的COntroller中,混淆层次,这是以丧失可维护性换来的快速性)。
再向前推理,为什么那么多热衷于Spring的人突然被RoR吸引,因为RoR肯定又Spring所没有,但符合程序员要求的心理,那是什么?快速简洁,也就是说,真正使用Spring开发一个完整带权限的项目,并不真正象他宣言和Demo展示的那样简单,甚至巨复杂,看看号称经典组合的Spring + Acegi关于实现基于容器的URL访问权限和组件访问权限的配置文件,配置行如此复杂,你的将来被捆绑在Spring下一个子框架Acegi上,Spring不是号称优雅解决一切吗,为什么Acegi的权限配置如此让人看不懂?
看看那下面的配置:
http://www.jdon.com/jive/thread.jsp?forum=61&thread=25141&message=18262459#18262459
在使用Struts+Spring+Hibernate架构中,最大的缺失就是:没有状态管理支持,只依靠Hibernate那点可怜的缓存是不行的,但是直接使用EJB的有态Bean本身又有不方便之处,这也就是Seam突出状态管理特点的原因。
没有感到Session支持这种缺憾的程序员都是因为他没有状态设计概念,他实际是使用这种架构做他的围绕数据库编程的软件系统,然后自我安慰以为达到OO设计最高水平,进而狂欢Struts+Spring+Hibernate简单得不是高科技了,都是自欺欺人罢了。
没有状态管理支持的意思就是:使用数据库持久替代状态管理,不使用内存缓存支持状态管理,打个比喻,当你在编辑文档时,是不是每个敲入每个字后,都要保存一次?我想大多数人不会因为怕掉电坠入如此神经质的操作中,但是你在企业开发时,为什么每次将新的状态数据都保存到数据库中进行持久呢?
所以,我们需要基于内存(如httpSession)的状态管理,而不是基于数据库,如果不抛弃数据库概念,就不能完全坚持OO面向对象的思维,就会产生思维方式的错误,见下面案例提问:
关于要经过7,8次审核的商品发布数据库设计:
http://www.jdon.com/jive/thread.jsp?forum=46&thread=27544
也就是说:在java世界中,没有一个架构象.NET世界那样主宰世界,包打天下,完美无缺,总是各有所长,我也不相信有完美无缺的架构,如果微软硬说它的东西是,那么出问题的就是微软本身,所幸bill gates 2008年前就退出日常管理了,他的时代要画个句号了。