- 浏览: 271416 次
- 性别:
- 来自: 北京
最新评论
-
caoxiaoj2ee:
:cry:
java 基础学习 -
shuiguozheng:
这么好的文章,被我发现额。谢谢
Tomcat集群与负载均衡区别以及特性 -
liwenjie:
接口中所有变量都必须被定义为final static?
sta ...
java 基础学习 -
javamonkey:
无论何种O,都没有考虑到展示的问题。
VO , PO , BO , QO, DAO ,POJO -
sdscx0530:
不错 谢谢
巧用Google Code备份代码
通过这一年多的艰苦奋战,项目就快接近收官之战。回首过往一年的开发历程,心中不免有些感慨万千,故写下这篇BLOG总结一下经验与教训,算是兑现上一篇BLOG的诺言。
项目简介
由于一些商业上的原因,我不能透露项目的细节。不过,我可以与大家分享一下所谓的“架构”。之所以给“架构”两字加上引号,是因为我不想玷污这个神 圣的词汇。在项目开始选用第三方组件(Component)时,由于种种原因,其实我只有很小选择余地,所以只能对着一些官方文档将这些组件并揍在一起。
图1 组件图
经验与教训
虽然我们平时说“成功的经验,失败的教训”,但是有时要区分两者并不容易,因为有些事情虽称不上成功,却也不至于失败。故请允许我暂时将其混成一谈。
#1 分而治之(divide and conquer),重构代码
在项目中当复杂业务逻辑变得复杂时,有的程序员没有胆量去重构旧代码,而取用保守方式,拼命地添加新的代码。这样做的后果就是会导致代码量激增,难于维护。“分而治之”可以帮助我们理清复杂的业务,提高代码可重用性。所以任何时候,都不要忘记这个程序基本的方法学。
#2 尽量不要使用远程(Remote)EJB
远程EJB给我们带来很多的问题:部置的复杂性,由于网络传输引起的性能问题,EJB安全性问题等。我的同事中有些人坚持使用远程EJB的原因,他 们认为只有使用远程EJB才实现群集(Cluster)。其实这想法是错误,具体可以参考《Marstering Enterprise JavaBeans》第三版中,第8章“EJB Performance Optimization”中“Choosing Between Local Interfaces and Remote Interfaces”和第19章“Clustering”。
#3 避免在程序中保存状态(State)
有的程序员偏爱全局类型变量,而忽略通过参数和返回值进行共享数据。状态对程序来说其实就是一种负担,在多线程和分布式的环境下更是如此。还有,编程的另一原则是尽量缩小变量有效范围(Scope),大家可以参考一下《Code Complete》中一些建议。
另外,要小心使用静态变量,切记要通过final关键字和Collections.unmodifiableXxxx方法(对于集合类型)使其不可变。如果需要在对象之间共享状态,可以考虑使用HttpSession或分布式的缓存如(JBoss Cache等)。
#4 如果使用Hibernate,请确保程序员了解Hibernate中持久化对象生命周期
在我身边有很程序员,在使用Hibernate时,没有花时间了解持久化对象生命周期。他们以普通JDBC的编程风格编写Hibernate程序。故出现了如下所示的代码:
Session session = getSession();
Cat cat = session.load( " kitty " );
cat.setName( " Hello Kitty " );
session.saveOrUpdate(cat);
}
列表1 代码示例
虽然上述代码功能上没有问题,但是反映了它的作者没有了解Hibernate的持久化对象生命周期。这里的session.saveOrUpdate其实是完全没必要的。如果你不明白个中原因,可以参考Hibernate的官方文档或《Hiberante In Action》的第四章“Working with persistent objects”。
#5 设计好你的业务对象模型
我看过很多项目的代码中其大量存在所谓的PO(Persistent Object)用于ORM和VO(Value Object)或称为DTO(Data Transfer Object)用于程序之间传输数据,更有甚者,这两种对象只是相差一两个属性。这样的做法的弊端是代码中充斥大量林林总总的copyXxx的方法,导致 程序出现一些不可预期的行为。
其实,通过对业务对象分析,尤其是对象之间的关系建立,上述问题中的大部分都是可以避免的。
#6 不要单独使用JSF
经过这两年过JSF学习与使用,我对JSF是又爱又恨。JSF有不少优点:
- 类似ASP.NET的事件驱动(Event-Driven)开发模型,简化了Web应用的开发;
- 通过EL(Expression Language,表达式语言)双向值绑定,提高编程效率;
- 基于组件(ASP.NET中称之控件)的模型,方便第三方进行扩展。
不过,同样JSF缺点也不少:
- 保存过多的页面状态,而除了Session和Application范围之外的Managed Bean都是没有状态,这个不对称性导致很多问题。所以在很多时候迫使程序员使用Session范围的Managed Bean。而过度使用Session会加大服务器的内存消耗;
- 蹩脚的验证框架等。
所以,在使用JSF时,我们应该结合其它优秀的框架如JBoss Seam,RichFaces等,达到互相取长补短效果。
结言
上述评论,仅代表我本人立场:-)。如有错误,还望各位朋友不吝赐教。
<script type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1')); Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90); //]]> </script>
评论:
#
re: 项目总结[未登录]
2008-12-09 15:17 | 三少
我觉得hibernate的saveOrUpdate最好不用,很容易出错。
做好save或者是update的判断就可以了!
JSF我觉得蛮好的,但是它自己的IOC不够强大,结合Spring就好多了! 回复
更多评论
发表评论
-
三大WEB服务器对比分析(apache ,lighttpd,nginx)
2012-11-07 14:42 1025一.软件介绍(apache lighttpd ngin ... -
apache+tomcat+jk1.2.18+lighttpd squid
2012-11-07 14:29 1018我这里主要是用lighttpd ... -
Oracle数据库 基础 创建数据库(手工脚本)
2012-11-02 17:10 901一、概念 一个Oracle数据库,最基本的构成(逻辑) ... -
apache tomcat 集群 分组
2012-11-01 03:09 1006对tomcat cluster集群配置中session复 ... -
MyEclipse 注册机 注册码 可用
2012-10-08 09:31 3import java.io.BufferedReade ... -
详解ORACLE数据库的分区表
2012-09-28 15:22 777引用:http://space.itpub ... -
web.xml文件中配置<mime-mapping>下载文件类型
2012-06-26 15:56 898TOMCAT在默认情况下下载.rar的文件是把文件当作t ... -
测试附件下载
2012-06-14 15:54 826测试 -
struts中#、%和$这三个符号的使用方法
2012-05-12 18:04 888转自:http://blog.sina.com.c ... -
node.js是什么,解决什么问题
2012-03-05 10:19 1097http://www.ibm.com/developerwor ... -
Java URLConnection 总结
2012-02-27 09:32 1039Java URLConnection 总 ... -
GA,RC,Beta,Release,Trial,Standard......等软件版本具体代表什么意思
2012-02-24 14:42 2101GA,RC,Beta,Release,Trial,Sta ... -
1.一天一点学习Linux
2011-07-04 16:13 844http://www.opsers.org/base/lear ... -
spring 参考手册
2011-07-04 14:44 820http://ajava.org/online/spring2 ... -
linux base
2011-07-01 10:50 545http://www.yesky.com/SoftChanne ... -
linux 软件通用安装
2011-07-01 10:14 686http://www.yesky.com/SoftChanne ... -
Java IO 的一般使用原则
2011-06-30 13:32 803Java IO 的一般使用原则: 一、按数据来源(去向) ... -
linux 重启服务 awk命令 kill系统服务
2011-06-29 14:56 1457[root@java-dev05 script]# more ... -
jquery + css
2011-06-28 12:40 776http://sd.csdn.net/a/20110620/3 ... -
java内存泄露
2011-06-21 17:29 801http://tech.it168.com/j/n/2007- ...
相关推荐
项目总结模板项目总结模板项目总结模板项目总结模板项目总结模板项目总结模板项目总结模板项目总结模板项目总结模板
网上订餐系统课程设计系列文档之-项目总结和个人总结 MyEclipse开发,Spring-Struts-Hibernate框架,MySql数据库 特别声明:文档是项目总结和我个人的原创总结,个人总结,个人总结,个人总结哦~并不含团队其他成员...
瓦姆(常州)公司MES智慧车间项目总结 瓦姆(常州)公司MES智慧车间项目总结
项目总结+项目心得体会
项目总结报告 PPT 演讲稿 项目总结报告 PPT 演讲稿 项目总结报告 PPT 演讲稿
JAVAEE期末项目总结报告.doc
经典项目总结报告模板,项目总结报告模板DOC,一、项目基本信息,二、项目度量信息。
人力资源管理系统\人力资源管理系统项目总结报告人力资源管理系统\人力资源管理系统项目总结报告人力资源管理系统\人力资源管理系统项目总结报告
ERP项目总结报告:1、前期的调研;2、软件的选型;3、合同的签订;4、 顾问的能力;5、 确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源...
尚硅谷尚医通项目总结 末尾的总结可以写在简历里 有需要的可以下载
适用于项目结项,项目实践,项目总结等,PPT模板
项目总结报告模板DOC,一、项目基本信息,二、项目度量信息。
华为项目管理模板之10 项目总结表 一、项目基本情况 I. Project Basic Info 二、项目完成情况总结 II、Project fulfillment sum-up 三、项目经验、教训总结 III、Project experience/lessons sum-up
java图书馆管理系统的项目总结PPT,希望能对大家有帮助
项目总结模板 个人总结报告 包括工时总结,个人总结,负责模块等等
项目总结ppt模板,敏捷项目,非敏捷项目均可使用
软件软件产品、软件项目)项目总结报告模板(编写软件产品、软件项目)项目总结报告模板(编写规范)规范)
项目总结1 项目的规模用户数量用户数量用户数量用户数量造价总价格造价总价格人员组成人员组成架构设计架构设计项目规模项目规模造价总价格造价总价格人员组成人员组成架
项目总结