论坛首页 Java企业应用论坛

和一个朋友的聊天,他比较排斥Spring

浏览 48444 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-11-04  
wobuzhi 写道
我就是那个所谓的朋友,看了大家的反馈,感觉收获蛮多的.不过,我想纠正下,其实我在04年就自己使用spring了,而且04年还建议过公司使用SPRING.而不像有些人想象的没使用过.:)
  其实,在我现在看的书中,有两本是SPRING的书,你说我是排斥SPRING吗? 我从来不排斥,相反我很喜欢SPRING的思想,但是要让我在项目中使用SPRING,我没有足够的理由说服自己,周围的用SPRING的朋友也没有足够的理由,我也曾在网上寻找过这个答案,可惜没有找到一个人专门来阐述SPRING在国内项目中所带来的价值(不是写所谓的AOP,IOC,基于配置的事务等),而是带来看的着摸的到的价值,而不是仅仅说说而已的价值.我想hibernate框架为项目所带来的价值,大家在使用时都深刻体会到了吧,即使你只是使用hibernate来替代JDBC这个最基本的功能.但SPRING呢? 它为项目所带来的价值真的像国内很多人说的那样多吗? 
  我觉的我设计时最高的设计指导原则就是软件生产率和软件质量的提高,而不是所谓的可扩展性,灵活性,代码优雅,基于配置,面向切面,IOC等.我们一定要时时刻刻的牢记我们做软件的目的,这就足够了.而不是用SPRING,我就一定能为我的项目带来更多的价值,有时候大家能静下来反省下会更好,国内从来不缺少优秀的实践者,但往往缺少思考者.
  那些EJB兴起的时候就说EJB好,HIBERNATE兴起的时候就说HIBERNATE好,SPRING兴起的时候就说SPRING好,这种人在国内太多了,为什么每个时期的流行思想都不是国内人提出来的呢? 不要仅仅实践实践再实践,为思考多留点时间吧..
 

hehe
Rod Johnson自己在《J2ee 设计开发编程指南》里都是主张 问题驱动而不是技术驱动。
Spring的框架,应该说是针对某一类问题提供了一套解决方法。但是,同样的问题并非不能用其他方法解决。

应该说,使用spring,可以减少一些自己设计编写工具并且整合的工作量。
如果有一群同样技术水平,配合很默契的工程师,使用不使用spring,其实差别不大。

spring就像外面卖的工具包,螺丝刀钳子之类的都有。家用维修基本够了。一般人拿过来就能用。
但是,对一些专门工业的人来说,比如修汽车,他们用的工具从尺寸上,精细度上可能就不一样。有时候用惯了自己手里的工具,拿个大众化的工具,即使能干同样的事情,也觉得不习惯。甚至有人更喜欢自己定制工具,更顺手,更省力(对他个人,但不一定适合别人)。
0 请登录后投票
   发表时间:2006-11-04  
完全没有意义的讨论。没有最好的library or framework,只有最合适的,哪个你觉得用着爽你就用哪个。我最初也觉得WebWork+Spring+Hibernate+Freemarker狠爽,现在把WebWork和Spring都踢走叻,因为用着多叻就觉得不爽叻,用起来太麻烦,索性自己写叻个框架,现在这个框架正用在公司的新产品中,不仅解决叻狠多以前Spring+Webwork的麻烦事,而且最重要的是大家都觉得用着狠爽,对我们自己的胃口。

下一步我要把Hibernate和Freemarker踢走,因为现在觉得它们俩个也碍事叻。

每个程序员都有自己的一套编程方式,有人喜欢麻烦点,有人喜欢直接点,有人喜欢规范点(如JSF拥蹩),有人喜欢灵活点。没有谁对谁错,自己用着爽就行叻。

就跟房子/车子/妻子/孩子一样,自己觉得好的那tmd就是好的!:D
0 请登录后投票
   发表时间:2006-11-04  
partech 写道
daquan198163 写道
Spring可以让我们这些菜鸟在不知不觉中享受AOP的好处,为什么要去用AspectJ做同样的事情呢,为了出去说自己用过AOP时底气更足?:)
还有Spring对web层和持久层框架的整合、简化异常处理、简化单元测试。。。如此多的好处一站式提供

AspectJ的使用要比Spring的配置简洁得多。使用Spring的AOP并不会不知不觉,原理是相同的。

还有你说的整合问题,Web没用过,没有发言权。同持久层的整合是鸡肋,有时还不得不直接访问。
简化异常处理是啥意思?单元测试还需要启动Spring麽?

这里说的单元测试,严格讲应该叫“集成单元测试”了,确实会启动Spring容器,参见江南白衣的幼学琼林--Spring下的单元测试要点

Spring对web层框架的整合:struts/ww/jsf可以随意切换,Equinox(同名,但不是那个Eclipse的项目)项目充分展示了这种能力,还有整合hibernate/iBATIS

简化异常处理:Spring提供了一种设计巧妙的异常处理机制,可以把底层抛的异常转换成runtime型的,使得应用代码及其简单,最明显的例子就是,虽然我在用着Hibernate,但我的DAO里根本没有Hibernate的异常,甚至没有import任何Hibernate的类;

现在人都很懒惰,程序员尤其懒惰而且据称是种美德,Spring提供了一站式解决方案而且解决的还挺优雅,所以能流行,那个AspectJ虽然某方面很厉害,但是他解决的问题太单一了,我这样的懒人一般不愿意投入精力去学
而且AspectJ不是已经合并到Spring2.0了吗,咱们还在这里争什么呢?
0 请登录后投票
   发表时间:2006-11-06  
我觉得可以这么理解“框架”的概念:它是项目中一系列规约的具体实现,是规约的执行者。实际情况不同(使用者、项目环境),所产生的规约不可能有完全一致的要素。对于一个现成的通用的框架,有人觉得好有人觉得坏,我觉得问题应该出于此。当然有一点是一致的,那就是规约的提出,是在结合实际情况的基础上,对实践经验的总结和提升。这一点使我们不能去跟风。反过来说,一个优秀的通用的规约,对实践的指导意义也是重大的。当然,前提是你必须足够理解这个规约。如果从规约的每一个细节去讨论其是否适合应用到自己的实践,也许永远不可能满足。这就得根据实际经验和项目的情况,选择是否使用或使用什么框架了,这跟框架本身并不矛盾。
0 请登录后投票
   发表时间:2006-11-06  
daquan198163 写道
这里说的单元测试,严格讲应该叫“集成单元测试”了,确实会启动Spring容器,参见江南白衣的幼学琼林--Spring下的单元测试要点

Spring对web层框架的整合:struts/ww/jsf可以随意切换,Equinox(同名,但不是那个Eclipse的项目)项目充分展示了这种能力,还有整合hibernate/iBATIS

简化异常处理:Spring提供了一种设计巧妙的异常处理机制,可以把底层抛的异常转换成runtime型的,使得应用代码及其简单,最明显的例子就是,虽然我在用着Hibernate,但我的DAO里根本没有Hibernate的异常,甚至没有import任何Hibernate的类;

现在人都很懒惰,程序员尤其懒惰而且据称是种美德,Spring提供了一站式解决方案而且解决的还挺优雅,所以能流行,那个AspectJ虽然某方面很厉害,但是他解决的问题太单一了,我这样的懒人一般不愿意投入精力去学
而且AspectJ不是已经合并到Spring2.0了吗,咱们还在这里争什么呢?

因为使用了Spring,所以需要他的测试支持,自己引入的问题,当然要自己解决。但是如果不用Sping呢?

任意切换WEB,听起来蛮不错,有实际需求么?

简化异常处理:赫赫,这个正是Aspect的长项阿,用AspectJ来实现,就是个一般问题,不需要“巧妙的设计”。

关于AspectJ的使用,我想问题就在于目前的使用太低级,太玩具,完全没有释放应有的威力。
如果,我说AspectJ可以全程的应用在程序中,你信么?
不仅如此,Aspect可以应用于整个开发过程的始终,从需求到发布,你信么?
Aspect的思想可以用以支持定义开发过程,你信么?

0 请登录后投票
   发表时间:2006-11-06  
partech 写道
daquan198163 写道
这里说的单元测试,严格讲应该叫“集成单元测试”了,确实会启动Spring容器,参见江南白衣的幼学琼林--Spring下的单元测试要点

Spring对web层框架的整合:struts/ww/jsf可以随意切换,Equinox(同名,但不是那个Eclipse的项目)项目充分展示了这种能力,还有整合hibernate/iBATIS

简化异常处理:Spring提供了一种设计巧妙的异常处理机制,可以把底层抛的异常转换成runtime型的,使得应用代码及其简单,最明显的例子就是,虽然我在用着Hibernate,但我的DAO里根本没有Hibernate的异常,甚至没有import任何Hibernate的类;

现在人都很懒惰,程序员尤其懒惰而且据称是种美德,Spring提供了一站式解决方案而且解决的还挺优雅,所以能流行,那个AspectJ虽然某方面很厉害,但是他解决的问题太单一了,我这样的懒人一般不愿意投入精力去学
而且AspectJ不是已经合并到Spring2.0了吗,咱们还在这里争什么呢?

因为使用了Spring,所以需要他的测试支持,自己引入的问题,当然要自己解决。但是如果不用Sping呢?

任意切换WEB,听起来蛮不错,但有什么实际需求么?

简化异常处理:赫赫,这个正是Aspect的长项阿,用AspectJ来实现,就是个一般问题,不需要“巧妙的设计”。

关于AspectJ的使用,我想问题就在于目前的使用太低级,太玩具,完全没有释放应有的威力。
如果,我说AspectJ可以全程的应用在程序中,你信么?
不仅如此,Aspect可以应用于整个开发过程的始终,从需求到发布,你信么?
Aspect的思想可以用以支持定义开发过程,你信么?



这我到完全相信。webwork其实就是一个用AOP作为底层框架从而搭建起来的一个web框架。我也看过Richard Oberg的几篇blog,说完全那AOP来实现domain object,听起来挺不错。

spring其实是反过来的,他是用IoC来实现AOP的,spring的优势在于集成了一堆功能进来了,你拿来就可以用了,就是所谓的一站式。

如果有人基于AspectJ做了这样一个一站式的full-stack框架,我也会有兴趣钻研一下的。

0 请登录后投票
   发表时间:2006-11-06  
robbin 写道
对自己没有用过的东西产生置疑是很正常的现象。

有什么必要非要说服人家呢?自己用好spring框架不就得了吗?

我就希望你们大家都别用spring,都自己手工搞定对象之间的依赖关系,手工搞定事务控制,手工搞定数据库访问层,嘿嘿想像一样那样的情景,该是多么幸灾乐祸啊。

碰上这种人,我就一句话,是的spring很烂,所以你千万别用spring。



说的太好了,哈哈!
0 请登录后投票
   发表时间:2006-11-06  
partech 写道
daquan198163 写道
这里说的单元测试,严格讲应该叫“集成单元测试”了,确实会启动Spring容器,参见江南白衣的幼学琼林--Spring下的单元测试要点
Spring对web层框架的整合:struts/ww/jsf可以随意切换,Equinox(同名,但不是那个Eclipse的项目)项目充分展示了这种能力,还有整合hibernate/iBATIS
简化异常处理:Spring提供了一种设计巧妙的异常处理机制,可以把底层抛的异常转换成runtime型的,使得应用代码及其简单,最明显的例子就是,虽然我在用着Hibernate,但我的DAO里根本没有Hibernate的异常,甚至没有import任何Hibernate的类;
现在人都很懒惰,程序员尤其懒惰而且据称是种美德,Spring提供了一站式解决方案而且解决的还挺优雅,所以能流行,那个AspectJ虽然某方面很厉害,但是他解决的问题太单一了,我这样的懒人一般不愿意投入精力去学
而且AspectJ不是已经合并到Spring2.0了吗,咱们还在这里争什么呢?

因为使用了Spring,所以需要他的测试支持,自己引入的问题,当然要自己解决。但是如果不用Sping呢?
任意切换WEB,听起来蛮不错,有实际需求么?
简化异常处理:赫赫,这个正是Aspect的长项阿,用AspectJ来实现,就是个一般问题,不需要“巧妙的设计”。
关于AspectJ的使用,我想问题就在于目前的使用太低级,太玩具,完全没有释放应有的威力。
如果,我说AspectJ可以全程的应用在程序中,你信么?
不仅如此,Aspect可以应用于整个开发过程的始终,从需求到发布,你信么?
Aspect的思想可以用以支持定义开发过程,你信么?

嗯,看来我小看AspectJ了,不过上面两点不能同意
用Sping是为了方便集成测试的,比如每个测试结束时自动回滚事务(免得清理现场)、对ut的自动依赖注入、OpenSessionInTest
都是很实用的功能,而且这些问题也不是Spring自己制造出来自己解决

任意切换WEB:我的意思是技术选型时自由。

另外你说的
如果,我说AspectJ可以全程的应用在程序中,你信么?
不仅如此,Aspect可以应用于整个开发过程的始终,从需求到发布,你信么?


还不太了解AspectJ,请教一下:这种全程使用AspectJ也能做到像Spring一样高度一致、非侵入吗?(代码里基本不出现SpringAPI、定义任何东西都是<bean class="xx.xx")
0 请登录后投票
   发表时间:2006-11-06  
daquan198163 写道
嗯,看来我小看AspectJ了,不过上面两点不能同意
用Sping是为了方便集成测试的,比如每个测试结束时自动回滚事务(免得清理现场)、对ut的自动依赖注入、OpenSessionInTest
都是很实用的功能,而且这些问题也不是Spring自己制造出来自己解决

任意切换WEB:我的意思是技术选型时自由。

另外你说的
如果,我说AspectJ可以全程的应用在程序中,你信么?
不仅如此,Aspect可以应用于整个开发过程的始终,从需求到发布,你信么?


还不太了解AspectJ,请教一下:这种全程使用AspectJ也能做到像Spring一样高度一致、非侵入吗?(代码里基本不出现SpringAPI、定义任何东西都是<bean class="xx.xx")


回滚事务,在父类的teardown中写一句transaction.rollback很困难么?

通过Aspect也可以自动注入阿,甚至配置文件都不需要。

说到技术选型,选取不同的WEB框架,我看不出同后面service层有多大关系。

AspectJ是对Java语言的一种扩展,俺不知道如何同Spring这样的框架比较。两者不是同类东西啊。

全程应用AspectJ,需要对编程的范式做出调整。从OO变成OO+AO。这会令人感到不舒服,就好像从PO范式转化到OO范式类似。

AO在在大家一阵热度之后,目前似乎无人问津了,我想,主要是因为在发掘了一些简单应用后,没有看到更多的领域。同时因为需要改变原有的OO思想,也需要个过程。
不过,我很看好这项技术,其必对软件开发产生深远的影响,不光局限于编程领域,持续研究中......

0 请登录后投票
   发表时间:2006-11-07  
    讨论的很热烈呀!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics