项目中spring分层开发的总结

对spring框架和开发模式进行了验证。大家有什么问题或好的建议,请回复,大家一起讨论!

一、 项目目标及完成情况

目标

完成情况

技术验证和推广

完成较好。

1. 共有7人实际参与项目开发,我们引入maven2作为构建工具,eclipse作为ide环境。大家都能在很短的时间初始化项目,并快速掌握各自需要的技术(如springspring mvc等)进行开发。

2. 对分层开发的模式也进行了探讨,证明它是可行的:可以各层并行开发,提高开发效率;而通过分层可以隔离关注点,使得各层开发人员可以只关注本层相关技术和接口,减轻开发人员负担,提高效率。

3. 在项目活动中碰到一些技术难点,我们将解决方案文档化,然后项目内共享,这样能在碰到同样问题时快速解决。现在还是碰到问题才解决,以后需要建立预研机制,较早发现可能出现的难点,尽早解决,避免对项目进展产生影响。

4. 平台还处于建设阶段,对项目的支持还不够,需要形成一些通用的组件。

过程和管理实施

有待提高。

1. 测试1.0版已发布,目前开发11版,完善分页功能和采用更好的验证方式。由于对规范开发的项目周期估计不足,加上管理上的一些问题,导致项目有所延期,需要对实际的项目开发进行量化分析,确立比较准确的人员和时间计划。

2. UC文档规范和编码规范等的引入,为项目提供了较好的支持。

3. 在实施中比较缺乏必要的文档支持,如设计文档等;同时各层的接口定义也出现较多问题,导致一些开发瓶颈的出现,这都需要在正式迭代中改进。

系统功能

完成较好。

1. 完成了UC文档确定的功能点,页面美观,使用方便,能给用户较好的页面体验。

2. 采用较好的面向对象设计,能提供一定的可重用性和扩展性。

二、展现层总结

经验与教训

1.         SpringMVC是一个简洁、标准的MVC实现,结构清晰,功能强大(主要体现在对日常WEB开发中可能遇到的各种常见问题的解决方案),有一定学习曲线,但是有其它MVC框架基础的开发人员可以较快上手;

2.         根据业务功能尽早确定接口,接口由展现层确定,由业务层实现;

3.         合理选择Controller可以减少开发工作量,前提是充分理解每种Controller的处理机制及其回调方法细节,Controller的编写更多的精力主要花在校验、出错处理上;

4.         页面工作量很大,特别是需要比较复杂javascript的页面;

5.         UI的流转设计等对于Controller的编写和业务层的接口有着很大的影响,应尽早明确,否则会产生较大的返工;

6.         展现层开发可以与业务层同步进行,推荐确定接口后,就编写业务层接口的mock实现,放在展现层的test包内,同时写单独的测试用spring配置文件;

待解决问题

1.         Controller是否应写test case,本次开发未做;

2.         如何减少校验的工作量,对于有业务逻辑的服务端校验如何实现,是否需要采用一些validator框架,如sunJEFvalidator组件,目前我们进行了研究,通过使用commons validator组件能够较方便的实现validator

三、业务层总结

经验与教训:

1.         SpringiBatis的应用还是很成功的,学习曲线比较平滑,好的框架好掌握;

2.         比较重视测试,编写很多测试案例,并频繁使用maven运行所有测试,使得问题能够及早发现,保证了各层能够快速成功集成

3.         对于很多问题都需要经过各层间的讨论来确定;

4.         接口由展现层定义,由业务层实现;

5.         持久层数据模型和领域模型是有区别的,但简单的情况下可以合二为一;

6.         Façade模式还是很有价值的;

7.         一些开源软件的使用需要比较小心,如iBatisnull的问题等,如果处理不当会花费较多的人力物力,需要技术较强的人对开源软件花费一定时间进行源码级的研究,才能找出较好的解决方案;

8.         认识到设计的重要性,需要对前置、后置条件等进行分析;

9.         数据类型分析简单,造成数据库设计对业务层产生不良影响;

待解决问题:

1.         沟通不够,需要建立沟通渠道,是否可以有专门的场合和时间讨论项目中的进度和问题;

2.         计划不明确,对于要完成哪些功能,完成到什么程度,没有明确的定义,需要设置里程碑目标。在正式迭代开始前,要明确每次迭代的任务和目标,需要结合业务需求进行计划;

四、持久层总结

经验与教训:

1.  通过代码生成工具,能够大大提高开发效率;

2.  工具使用者要求对ibatissql比较了解;

3.  在使用过程中对工具进行了完善,这对正式使用工具提供了保证;

4.  与业务层的接口,应该由业务层确定,由持久层实现,而不是由持久层决定;

待解决问题:

1.  持久层的测试该如何进行,才能真的有用;

2.  一些通用功能如分页代码生成,还在开发中;

 

posted on 2006-01-16 13:57 pesome 阅读(6007) 评论(12)  编辑  收藏 所属分类: Spring+Struts+Hibernate

评论

# re: 项目中spring分层开发的总结 2006-01-16 15:36 agile

呵呵,不错.
对于持久层测试,建议采用嵌入式DB,象Apache的Derby.  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-16 23:28 pesome

呵呵,主要不是数据库的问题。我们的DAO采用middlegen +velocity的代码自动生成工具完成,写些普通的CRUD的测试代码,基本不会错。由于没有业务逻辑,测试的意义就不那么大。  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-17 20:38 Jet Geng

搂主可否介绍一下在项目中使用maven的经验。谢谢了先  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-17 21:15 风往南吹

你小子也不在群里发言了。。。 :)  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-18 09:32 pesome

maven使用很方便的,关于maven的文章网上也能搜到。个人认为,它的亮点有三:

1。通过pom管理jar文件,能构建本组织自己的jar repository,对所有项目进行统一支持。
2。管理项目间的依赖,包括依赖传递,能比较方便的对项目进行项目级细分,如我们分为db,core,web,config等多个项目,还可以方便的按模块添加项目。
3。开放的插件体系,能提供各种需要,如eclipse,clover,site,package,test等

实际使用较多的就是 mvn eclipse:eclipse,mvn package,mvn test。
我现在也是刚开始用,感觉还是不错的,推荐大家使用,maven网址:http://maven.apache.org  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-20 10:31 Frankies

个人建议:
 1 .表现层不要用spring mvc, 改用struts。
 2.持久层改为Hibernate,因为它是不适合类型的数据库,而且不用关心它的语法问题, ibatis则不然。  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-01-20 11:13 pesome

呵呵,spring mvc也是很不错的mvc框架,matt在spring live里也挺推崇的,我们用下来感觉也不错。ibatis和hibernate各有使用的范围,据我所知很多大型的项目采用ibatis,因为它有对sql的控制,而hibernate如果使用不当会产生较多的性能问题。感谢建议!  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-04-05 15:02 daquan

待解决问题
2.如何减少校验的工作量,对于有业务逻辑的服务端校验如何实现
----------------------------------
org.springframework.validation提供了验证框架,对一般的表单验证和validator一样采用配置文件,对于业务逻辑相关的验证,我用如下做法,不知我理解的对不对。
例如我的一个SimpleFormController

public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command,
BindException errors) throws Exception {
。。。。。。。。。。。。
if (已经存在相同的email地址的用户) {
errors.rejectValue("fieldName", "errorCode",
getText("error.message.key",
new Object[] {
var1,var2}));
return showForm(request, response, errors);
。。。。。。。
-----------------------------------
其中getText:
public String getText(String msgKey, Object[] args) {
return getMessageSourceAccessor().getMessage(msgKey, args);
}

jsp显示错误信息:
<spring:bind path="user.*">
<c:if test="${not empty status.errorMessages}">
<div class="error">
<c:forEach var="error" items="${status.errorMessages}">
<c:out value="${error}" escapeXml="false"/><br />
</c:forEach>
</div>
</c:if>
</spring:bind>  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-04-05 15:27 pesom

呵呵,非常感谢。这个问题我们后来解决了,就是这种方式,通过springmodule支持的commonvalidator  回复  更多评论   

# re: 项目中spring分层开发的总结 2006-04-07 15:30 null

这个是正解http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-3.html

public class PriceIncreaseValidator implements Validator { private int DEFAULT_MIN_PERCENTAGE = 0; private int DEFAULT_MAX_PERCENTAGE = 50; private int minPercentage = DEFAULT_MIN_PERCENTAGE; private int maxPercentage = DEFAULT_MAX_PERCENTAGE; /** Logger for this class and subclasses */ protected final Log logger = LogFactory.getLog(getClass()); public boolean supports(Class clazz) { return clazz.equals(PriceIncrease.class); } public void validate(Object obj, Errors errors) { PriceIncrease pi = (PriceIncrease) obj; if (pi == null) { errors.rejectValue("percentage", "error.not-specified", null, "Value required."); } else { logger.info("Validating with " + pi + ": " + pi.getPercentage()); if (pi.getPercentage() > maxPercentage) { errors.rejectValue("percentage", "error.too-high", new Object[] {new Integer(maxPercentage)}, "Value too high."); } if (pi.getPercentage() <= minPercentage) { errors.rejectValue("percentage", "error.too-low", new Object[] {new Integer(minPercentage)}, "Value too low."); } } } public void setMinPercentage(int i) { minPercentage = i; } public int getMinPercentage() { return minPercentage; } public void setMaxPercentage(int i) { maxPercentage = i; } public int getMaxPercentage() { return maxPercentage; }}
  回复  更多评论   

# re: 项目中spring分层开发的总结 2007-03-23 16:45 StormSpire

关于Ibatis 和 hibernate,一般是性能要求很高的或者使用现有的数据库,并且设计的思想没有按照OO原则的,用ibatis; 如果要求不高,而且是重新设计数据库的,建议用hibernate,通过hibernate来生成表结构  回复  更多评论   

# re: 项目中spring分层开发的总结 2007-03-26 10:34 pesome

@StormSpire
恩,这个也是我现在的建议。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

主要记录作者在学习java中的每一步足迹。除非特别说明,所有文章均为本blog作者原创,如需转载请注明出处和原作者,如用于商业目的,需跟作者本人联系。
欢迎大家访问:

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

java技术

人间百态

朋友们的blog

搜索

最新评论

阅读排行榜

评论排行榜