- 浏览: 589463 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
jianxin1009:
你说的答案是对的
Re: 一道微软的面试题(年薪40万) -
thrillerzw:
应该相信爱情
忽然相信爱情。。。 -
weng:
jaxchow 写道mikeandmore 写道我觉得国外之所 ...
国外项目的代码质量真是高啊 -
cinhoo:
怎么也应该叫大蛇蛋才对嘛
lazypy 这个小蛇蛋不错 -
rosolio:
这个怎么解决?
Hibernate Annotation的中@ManyToOne和CascadeType问题
我们已经被框架所包围,我们已陷入了学习之苦。
了解算法,设计模式,语言特性,就可以成为一名合格的程序员了吗?理论上是的,但仅仅如此,却不足以找到一份理想的差事,因为众多的招聘信息上都明确注明,应聘者应当熟悉xx框架,yy组件。
由于长期接受中国式教育,所以我们已经习惯了学习,学习几个框架,对于国人来说也不是什么大不了的事情,然而我们也发现,相对于我们的学习能力而言,我们的创造性显得有些不足,我们有了继承他人的能力,我们也缺乏一种颠覆他人的精神。
谦虚的说,我是一名java的初学者,狂妄的说,我并不比所谓高手差多少,他们不过是多了解一些框架,走的路比我过的桥多一些。
作为一名初学者,这大半年以来在倒腾各种框架,时间有些,虽然无法精通任何一项,还是对一些框架有所了解了。spring,hibernate,struts2,log4j, dom4j 都是很棒的。
作为一个不觉得自己比高手差的人,曾经写过篇《被我抛弃的开源框架》,部分人与我有同感,更多的人对我的这种不尊重他们所推崇的框架的态度表示反对,甚至是愤怒。这几个框架是GWT,TAPESTRY5,STRUTS 1.X,GRAILS, ROR。都是表示层的框架。
此时,鄙人想再次不知天高地厚的批评一下目前两种流行的开发习惯。
1. 使用spring的 HibernateDaoSupport 编写 Dao 代码。
spring 封装了事务管理,使用 HibernateDaoSupport被迫使用spring的事务管理,当Dao不能正常工作后,很难寻找到问题所在,常见的有lazyload的问题,OpenSessionInViewFilter 的 ReadOnly 的问题。
虽然好奇心驱使我想去了解,他人是如何解决这些问题的,想去彻底学习 spring的事务管理。 但理智的想一下,这根本就是庸人自扰,不使用spring dao,Dao 的问题可能出现在Hibernate的使用上,使用了spring dao,问题可能出现在spring dao的使用上和Hibernate的使用上,既然已经确定问题出在spring dao的使用上,为何不直接使用Hibernate编写dao,自己管理session, ThreadLocal 的模式在80% 的应用中我想都是可以满足要求的。如此一试,发现好处有三:
a, 所有和session生命周期的问题解决了;
b, 代码变得清晰了,以前为了在TestCase中模仿 OpenSessionInViewFilter 还专门写SetUp和TearDown,现在我的session我作主;
c, 性能提升了,对于大批量的CRUD操作,性能至少提高100%。
spring框架最好用的是它的IOC容器,最大的问题是内容庞杂,太追求面面俱到,细节的学习点多。
当我们使用他人提供的工具时,最大的弊病是太多的细节被隐藏了,如果像log4j这样的细节无关紧要的工具也就无所谓了,Dao , Service 这样的核心代码,太多细节被隐藏,是很危险的,也许解决一个细节问题的时间,超过了编写一个核心算法的时间,时间浪费在了不能对产品对质量有所提高的地方。此外,如果他人的工具有着设计上的缺陷,或者bug,那问题就更大了。
当然,我们不能抱着对框架完全不信任的态度来对待框架,我想小学生守则上的话能很好的概括我的观点:自己能做的事情自己做。
2. aop
首先必须肯定,aop真的是很牛B的创意。但我认为,aop 应该是用于解决特殊问题,而不应该作为架构的基础。所谓特殊问题,比如Hibernate的LazyLoad特性,是通过拦截getters实现的,的确是非aop不可以为之。
aop 在架构中也有很多应用,如,权限管理。
但眼下 aop 颇有滥用之势,如aop文章中经常提到的用于异常处理的aop模式,鄙人就不敢苟同。
a, 不使用 aop 同样可以做到异常的一致性处理。对于全局的异常记录方式,无论是使用Log4j还是自己编写的Logger,都可以在Logger这一类中得到一致性的控制。对于代码的冗余,可以使用callback模式,比如HibernateTemplate.excute(HibernateCallback)。
b, aop 会对性能产生影响。
c, aop 是基于方法拦截的,是基于java语言特性的,不能够放之四海,因此,不宜过于依赖,它应用来实现一些与众不同的功能,而不是解决问题的首先。
d, aop 限定了对象创建的方式,只能是从工厂模式中创建的对象,或者Ioc容器中取出的对象。
个人拙见,欢迎拍砖。
了解算法,设计模式,语言特性,就可以成为一名合格的程序员了吗?理论上是的,但仅仅如此,却不足以找到一份理想的差事,因为众多的招聘信息上都明确注明,应聘者应当熟悉xx框架,yy组件。
由于长期接受中国式教育,所以我们已经习惯了学习,学习几个框架,对于国人来说也不是什么大不了的事情,然而我们也发现,相对于我们的学习能力而言,我们的创造性显得有些不足,我们有了继承他人的能力,我们也缺乏一种颠覆他人的精神。
谦虚的说,我是一名java的初学者,狂妄的说,我并不比所谓高手差多少,他们不过是多了解一些框架,走的路比我过的桥多一些。
作为一名初学者,这大半年以来在倒腾各种框架,时间有些,虽然无法精通任何一项,还是对一些框架有所了解了。spring,hibernate,struts2,log4j, dom4j 都是很棒的。
作为一个不觉得自己比高手差的人,曾经写过篇《被我抛弃的开源框架》,部分人与我有同感,更多的人对我的这种不尊重他们所推崇的框架的态度表示反对,甚至是愤怒。这几个框架是GWT,TAPESTRY5,STRUTS 1.X,GRAILS, ROR。都是表示层的框架。
此时,鄙人想再次不知天高地厚的批评一下目前两种流行的开发习惯。
1. 使用spring的 HibernateDaoSupport 编写 Dao 代码。
spring 封装了事务管理,使用 HibernateDaoSupport被迫使用spring的事务管理,当Dao不能正常工作后,很难寻找到问题所在,常见的有lazyload的问题,OpenSessionInViewFilter 的 ReadOnly 的问题。
虽然好奇心驱使我想去了解,他人是如何解决这些问题的,想去彻底学习 spring的事务管理。 但理智的想一下,这根本就是庸人自扰,不使用spring dao,Dao 的问题可能出现在Hibernate的使用上,使用了spring dao,问题可能出现在spring dao的使用上和Hibernate的使用上,既然已经确定问题出在spring dao的使用上,为何不直接使用Hibernate编写dao,自己管理session, ThreadLocal 的模式在80% 的应用中我想都是可以满足要求的。如此一试,发现好处有三:
a, 所有和session生命周期的问题解决了;
b, 代码变得清晰了,以前为了在TestCase中模仿 OpenSessionInViewFilter 还专门写SetUp和TearDown,现在我的session我作主;
c, 性能提升了,对于大批量的CRUD操作,性能至少提高100%。
spring框架最好用的是它的IOC容器,最大的问题是内容庞杂,太追求面面俱到,细节的学习点多。
当我们使用他人提供的工具时,最大的弊病是太多的细节被隐藏了,如果像log4j这样的细节无关紧要的工具也就无所谓了,Dao , Service 这样的核心代码,太多细节被隐藏,是很危险的,也许解决一个细节问题的时间,超过了编写一个核心算法的时间,时间浪费在了不能对产品对质量有所提高的地方。此外,如果他人的工具有着设计上的缺陷,或者bug,那问题就更大了。
当然,我们不能抱着对框架完全不信任的态度来对待框架,我想小学生守则上的话能很好的概括我的观点:自己能做的事情自己做。
2. aop
首先必须肯定,aop真的是很牛B的创意。但我认为,aop 应该是用于解决特殊问题,而不应该作为架构的基础。所谓特殊问题,比如Hibernate的LazyLoad特性,是通过拦截getters实现的,的确是非aop不可以为之。
aop 在架构中也有很多应用,如,权限管理。
但眼下 aop 颇有滥用之势,如aop文章中经常提到的用于异常处理的aop模式,鄙人就不敢苟同。
a, 不使用 aop 同样可以做到异常的一致性处理。对于全局的异常记录方式,无论是使用Log4j还是自己编写的Logger,都可以在Logger这一类中得到一致性的控制。对于代码的冗余,可以使用callback模式,比如HibernateTemplate.excute(HibernateCallback)。
b, aop 会对性能产生影响。
c, aop 是基于方法拦截的,是基于java语言特性的,不能够放之四海,因此,不宜过于依赖,它应用来实现一些与众不同的功能,而不是解决问题的首先。
d, aop 限定了对象创建的方式,只能是从工厂模式中创建的对象,或者Ioc容器中取出的对象。
个人拙见,欢迎拍砖。
评论
21 楼
抛出异常的爱
2007-09-19
kele8boy 写道
我现在的苦恼是,学了设计模式,无法应用的实际项目中去
重构那本书看了,看了以后能马上改善项目的代码
可设计模式,只能看懂书中的例子,哦,是那么回事。可实际无从下手,用不上去。
实际项目中,实体几乎都是属性加get,set。
用了框架后,action调用下一层,action中几乎也没什么东西了,只起到一个值传递
需要调用什么,一般在service里写。。
设计模式的东西似乎用不上去,现在就郁闷在这里。
最好的设计模式是不用设计模式。。。。重构那本书看了,看了以后能马上改善项目的代码
可设计模式,只能看懂书中的例子,哦,是那么回事。可实际无从下手,用不上去。
实际项目中,实体几乎都是属性加get,set。
用了框架后,action调用下一层,action中几乎也没什么东西了,只起到一个值传递
需要调用什么,一般在service里写。。
设计模式的东西似乎用不上去,现在就郁闷在这里。
20 楼
itkui
2007-09-09
说的很对,哥们现在就被框架所困了。
19 楼
renxianyu168
2007-08-17
aop 会对性能产生什么影响?
18 楼
hyhongyong
2007-07-31
框架是工具,没有好与不好,只有适合不适合。
对任何事物的认识都有一个过程,水平到一定程度。就会达到“见山还是山,见水还是水”的境界。
对任何事物的认识都有一个过程,水平到一定程度。就会达到“见山还是山,见水还是水”的境界。
17 楼
zhouxuanyi
2007-06-20
楼主从一个极端到另一个极端了,用javaeye上一个人,是谁,我记不住了,说的”不是框架不好,是你没有学好框架“。不过我承认好的框架是让人不会用错的框架
16 楼
icefire
2007-06-09
放新手帖也不错,给告诉新手,不要沉迷于框架。
呵呵!!
呵呵!!
15 楼
stamen
2007-06-09
楼主所说的使用HibernateDaoSupport编写DAO,其实也是可以直接在Spring中使用原生Hibernate API写DAO的,不会有任何问题,你可以参考Spring的帮助文档。
对于第二点,我非常赞同,AOP这种东西我觉得更象是系统级的东西,适合AOP的场合是很少的,如事务管理、安全管理是目前被证明比较适用的场合,由于这些使用场合比较固定,因此一般都是直接使用他人的即有实现产品,如Spring或Acegi,我们绝少需要在程序中直接使用AOP进行编程。所以了解AOP的技术便不是要去如何在程序中使用他,还是更好的理解即有产品的内部实现而已。
对于第二点,我非常赞同,AOP这种东西我觉得更象是系统级的东西,适合AOP的场合是很少的,如事务管理、安全管理是目前被证明比较适用的场合,由于这些使用场合比较固定,因此一般都是直接使用他人的即有实现产品,如Spring或Acegi,我们绝少需要在程序中直接使用AOP进行编程。所以了解AOP的技术便不是要去如何在程序中使用他,还是更好的理解即有产品的内部实现而已。
14 楼
Chamjoneu
2007-06-07
感觉上奋青的味道很重 所谓框架的东西 可以理解为编程上的一种准则一种标准 使用框架 一个减少开发工作量 再者减少后来跟进的维护人员的学习成本 很难想象一个自己造轮子的项目有什么生命力 再说可控性 每个框架后面都有顶尖的社区在维护者 出了问题也好解决啊 所以我们要做的是不断寻找开发学习更好 更合适的框架
13 楼
Garriot
2007-05-23
楼主的这些文章和相关评论让我想起胡适先生的一篇文章《多研究些问题,少谈些主义》。
当然,这个题目不是用于评价楼主以及楼主观点的。
我只是感觉无论谈什么,大家其实都是在解决问题或总结问题。主义只不过是用于解决问题的规范和准则。
无论答案是什么,我们都是再找一个最优化的解决方案,但寻找解决方案这个问题本身却是一个难解问题
当然,这个题目不是用于评价楼主以及楼主观点的。
我只是感觉无论谈什么,大家其实都是在解决问题或总结问题。主义只不过是用于解决问题的规范和准则。
无论答案是什么,我们都是再找一个最优化的解决方案,但寻找解决方案这个问题本身却是一个难解问题
12 楼
jianfeng008cn
2007-05-13
我感觉现在的问题, 是有些人工作了几年就自以为是高手了,还有些新人感觉自己更进的一层,就以为别人问题太多,愤青一般,却不问问自己是不是真的牛起来了。这些现象是不是都可以说是浮躁呢,还是踏踏实实做点事吧
11 楼
xly_971223
2007-05-13
成精华了?
10 楼
radar
2007-05-12
个人崇拜注意在javaeye又会掀起一段高潮吗?
robbin再来一段《再掂javaeye偶像》吧!现在马甲太多了,快找不到偶像真身了。
robbin再来一段《再掂javaeye偶像》吧!现在马甲太多了,快找不到偶像真身了。
9 楼
jasongreen
2007-05-12
还是ajoo和一刀识货,感谢。
8 楼
温柔一刀
2007-05-12
不至于被搞成新手帖,给个良好
7 楼
风雪涟漪
2007-05-12
写得不错,现在也开始看看源码了,Java基础很重要,Class.forName 这个说得很好,有空学学那些框架,不如把一门框架得源码掌握了,其他得都没什么。其实相似得框架没有必要学,如Struts和webwork。学一种就行了。
一家之言。
一家之言。
6 楼
ajoo
2007-05-12
谁给挪一下吧,这帖子怎么会在新手区呢?晕。
5 楼
javafound
2007-05-12
有同感,由与工作原因,我接触到的java初学者很多,流行的这些东东,对初学者产生了很不好的影响!他们经常问些这样的问题:
"hibernate里怎么连mysql....
"Struts怎么弹出一个对话框...
"struts里怎么del一个己上传的文件...
使得java世界,对许多初学都来说是一片混乱,除了SSH,好似不知有其它可学的;言必称SSH,但知道Class.forName("...")只能用来装载DB Driver。
我理解这也正常,以前,新婚入洞房时,都要先吼声“毛XX万岁”,才可行事;现在,凡事先举“八荣八耻”大旗;java程序员群中,不说SSH,你都不好意思开口---这种文化传统,是很难逃的开的。
这并不是说我们习惯了学习,这一点也不象“乱世”,开放的java提供给了程序员更多的选择的自由和乐趣,但对与没有选择能力或都说不习惯选择的人来说,还是习惯盲从。
"hibernate里怎么连mysql....
"Struts怎么弹出一个对话框...
"struts里怎么del一个己上传的文件...
使得java世界,对许多初学都来说是一片混乱,除了SSH,好似不知有其它可学的;言必称SSH,但知道Class.forName("...")只能用来装载DB Driver。
我理解这也正常,以前,新婚入洞房时,都要先吼声“毛XX万岁”,才可行事;现在,凡事先举“八荣八耻”大旗;java程序员群中,不说SSH,你都不好意思开口---这种文化传统,是很难逃的开的。
这并不是说我们习惯了学习,这一点也不象“乱世”,开放的java提供给了程序员更多的选择的自由和乐趣,但对与没有选择能力或都说不习惯选择的人来说,还是习惯盲从。
4 楼
xly_971223
2007-05-12
当水平越来越高的时候 框架用起来越来越得心应手
相反让一个新手用spring hibernate反而会让他们不知所错 摸不着头脑 出了错也很难找到源头
当你的程序重复代码越来越多 维护越来越难的时候 你自然就会用框架或者自己开发框架了
没有必要把每一个框架都研究透彻。 先大概了解一下各种框架,当项目中需要的时候再去深入
相反让一个新手用spring hibernate反而会让他们不知所错 摸不着头脑 出了错也很难找到源头
当你的程序重复代码越来越多 维护越来越难的时候 你自然就会用框架或者自己开发框架了
没有必要把每一个框架都研究透彻。 先大概了解一下各种框架,当项目中需要的时候再去深入
3 楼
shaucle
2007-05-12
1 Dao.
如果是jpa,那岂不更"不能控制"?
个人认为dao只是一个中间产物,框架的不够成熟而产生的.
dao本来就不怎么样,再在外面包装,当然就更容易出问题了.
2 aop.
不成熟不敢用,自已实现一般更不可取.
理由同上.
这个基本和楼主同.
总的来说,如果你不了解基本的内部机制,可能刚开始还认为能上手,但马上你就会crack up.
不然,jboss,interface21这些公司怎么赚钱?
如果是jpa,那岂不更"不能控制"?
个人认为dao只是一个中间产物,框架的不够成熟而产生的.
dao本来就不怎么样,再在外面包装,当然就更容易出问题了.
2 aop.
不成熟不敢用,自已实现一般更不可取.
理由同上.
这个基本和楼主同.
总的来说,如果你不了解基本的内部机制,可能刚开始还认为能上手,但马上你就会crack up.
不然,jboss,interface21这些公司怎么赚钱?
2 楼
jameswei
2007-05-12
"框架为我所用,勿为框架所困" 写得不错.
大部分都是为了框架而去使用框架,大有甚者是为了流行而用,称滥用。
大部分都是为了框架而去使用框架,大有甚者是为了流行而用,称滥用。
发表评论
-
与梁飞聊
2008-07-31 14:39 1333桂健雄 说: 做框架,做产品,做项目,还是做门户,是个头疼的问 ... -
javascript,css filter的使用
2008-05-19 23:02 0css。filter。。。。 -
Hook XML/Annotation:一种全新的配置方式
2008-04-07 11:01 1905姑且称这种配置方式叫做Hook。 通常,我们会使用xml,p ... -
程序员的三重境界
2008-03-24 16:58 1877见图。。。。。 -
管理机构
2008-02-16 02:23 2357商场如战场 道,天,地,将,法 1. 决策机构(道,天,地) ... -
goodbye,2007
2008-02-01 11:51 2524at 2007: 1. working harder,and ... -
为什么不自己做个数据库系统
2008-01-20 21:59 2769我所说的自己写DB,并不是要写一个像mysql一样功能强大齐全 ... -
web widget分类,你用的是哪种?
2008-01-18 11:50 43031. js对象式widget 优点:js端可以深度控制widg ... -
初涉webservice~~~
2007-11-04 00:16 1399之前搞过一次webservice,在weblogic下搞得,头 ... -
PHP vs JAVA vs Ruby,无奈的选择
2007-10-20 14:39 6961我一向是不屑于php和ro ... -
我选择组件一览
2007-10-19 11:18 1417freemarker 模板语言,用于生成页面代码 guice ... -
自己构思的MVC框架
2007-10-16 11:15 1530我除了是一个很懒惰的人,更是一个很吝啬的人,更加是一个不愿被约 ... -
spring=画蛇添足
2007-06-05 15:24 28087决定把在javaeye上最后一 ... -
开发步骤小结
2007-04-28 13:18 13071. 建立svn项目,以前是先建项目再导入,发现这样并不好 2 ... -
项目失败的思考
2007-04-07 14:49 14081.鲁莽的追求新的开发框架 2.没有让组员提前学习必要的知识 ... -
可复用权限系统的思考
2007-04-06 18:22 86User{ String username; ... -
被我抛弃的开源框架
2007-03-20 20:20 265481. GWT ,它是个javascript的 ... -
[转]Spring 配置要点
2007-03-06 13:22 3335原文: http://wiki.javascud.org/di ...
相关推荐
WPF框架WPF框WPF框架架WPF框架WPF框架WPF框架WPF框架WPF框架WPF框架WPF框架WPF框架
SSH三大框架的jar包,完全可以承担一些平常的项目
SSH框架所用jar包
struts2框架所需要的jar包,包括commons-logging-1.0.4.jar,struts2-core-2.0.11.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,xwork-2.0.4.j等,希望对大家有用!
SSM框架整合所需要的所有jar包
大家搭建SSM框架需要的一些jar包集合,免除挨个搜索的烦恼。
这是搭建SSH框架所需jar包,struct2,hibernate3,spring
是基础框架所用的jar包
作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成实际Android平台骨干的服务框架。其中的主要内容包括:通过启动程序了解Android框架的概要,移植Android以及...
整合Spring SpringMvc Mybatis,搭建SSM框架所用到jar包;整合Spring SpringMvc Mybatis,搭建SSM框架所用到jar包;
能在线下载的XPosed框架,支持安卓8以下,ROOT后可一键在线安装。支持雷电模拟器、夜神模拟器、逍遥模拟器、部分云手机以及系统支持的手机。Xposed鸭是一款基于Xposed Installer的修改版软件,他弥补了原版XPosed...
搭建SSM框架所用到的xml基本配置以及对应的jar包,包含web.xml,spring-ioc.xml,spring-mvc.xml,mybatis-config.xml
之前写NB、SIM、LORA模块程序的时候经常为AT指令头疼不已,用过百度来的AT框架,用过华为的AT框架,用过同事写的at框架。 百度出来的的五花八门,华为LiteOS的AT框架必须配合系统一起使用,同事写的看着最舒服,可是...
zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架 zk web框架
该框架标题为交通建设项目管理信息化系统。 二、功能介绍 1.代码按照三层结构+MVC模式设计。 2.界面展现层采用WPF开发。 3.系统界面采用统一样式定义。 4.界面设计业务代码全面分离。 5.系统设置模块管理。 6...
gsoap生成完整的onvif框架代码所用到的wsdl,路径已经修改好了,可以直接用,参考里面的说明即可生框架代码
最新SpringBoot框架后台管理模板 本SpringBoot框架采用零xml配置,全部动态启动、支持热部署 框架结构清晰明了! 框架管理:maven 框架: 1.核心框架---------Spring-boot 2.数据源框架-------mybatis、HikariCP...
struts2+spring+Hibernate三大框架所用jar包。还包括了连接oracle和mysql数据库的jar包
SSH2框架所用jar包,SSH2版本分别为:spring-framework-3.1.0,hibernate3.3.2和struts-2.2.3.1
ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh...