`
xujunJ2EE
  • 浏览: 69736 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

service开发规范(转)

阅读更多
1:使用断言控制输入。

使用断言来判断有效的输入,这样能够避免异常的扩散,迅速定位错误和减少BUG出现的几率。

如:

Java代码
1.import org.springframework.util.Assert; 
import org.springframework.util.Assert;Java代码
1.private boolean addAttachment(Attachment att) {  
2.  Assert.notNull(att, "att对象不能为空");  
3.} 
private boolean addAttachment(Attachment att) {
  Assert.notNull(att, "att对象不能为空");
}要学会灵活运用断言,不仅仅是用来断言来判断方法的输入参数是否正确,还可以判断业务逻辑,每次方法调用的输入输出,至于何时使用需要自己根据方法自我判断。



2:只抛出RumtimeException

作为service层,自己不清楚调用方到底是谁,也不知道调用方如何使用自己的接口,那么自己写出的接口最好是抛出RumtimeException,这样调用方能够处理这个异常或者觉得处理这个异常有必要的话,就进行处理。如果使用Exception就得强制那些处理不了的调用方继续向外抛出。抛出RumtimeException的时候需要在注释里申明我抛出了该异常。

Java代码
1.throw new RuntimeException("工作流初始化失败!"); 
throw new RuntimeException("工作流初始化失败!");

3:在Service层做事务处理

大家都知道Service层一般是用来组合DAO,所以经常出现需要事务处理的地方,笔者建议尽量在service层做事务处理。

因为一般业务逻辑都屏蔽在service层。笔者习惯使用Spring的手动事务。

Java代码
1.new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {     
2.            protected void doInTransactionWithoutResult(TransactionStatus status) {     
3.                //调用DAO按照ID删除部门     
4.            }     
5.});    
new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {  
            protected void doInTransactionWithoutResult(TransactionStatus status) {  
                //调用DAO按照ID删除部门  
            }  
});   



4:Service接口的异常处理

以前开发的时候都会向外抛出一个友好的运行时异常,这种异常信息能够直接展现给用户,如“您添加的用户名已经存在”,但是现在考虑到国际化,所以觉得Service的接口应该抛出错误代码,定义一个友好错误代码运行时异常,在程序出现条件错误的时候抛出错误代码。错误代码可以定义一个枚举类来实现。

Java代码
1./** 
2. * 错误代码定义 
3. * 
4. * @author fangtengfei 
5. * @date   2010-3-3 
6. */ 
7.public enum ErrorCode {  
8.    /** 
9.     * 用户不能重复 
10.     */ 
11.    User_Not_Repeat,  
12.    /** 
13.     * 用户名太长 
14.     */ 
15.    User_Name_Too_Long  
16.} 
/**
* 错误代码定义
*
* @author fangtengfei
* @date   2010-3-3
*/
public enum ErrorCode {
/**
* 用户不能重复
*/
User_Not_Repeat,
/**
* 用户名太长
*/
User_Name_Too_Long
}Java代码
1.在Service里抛出:throw new FriendlyCodeRuntimeException(ErrorCode.User_Not_Repeat); 
在Service里抛出:throw new FriendlyCodeRuntimeException(ErrorCode.User_Not_Repeat); 



5:必须记录日志

  大家都知道,记录日志的目的,主要是当程序运行在不同的环境下,使用日志来监控程序的运行,有些异常可能会特定的环境发生,而这种环境不容易被重现,所以此时唯一能定位问题的途径就只有日志。

Service层会被各种调用方使用,特别是对外提供Service,环境更会前差万别,如何迅速并有效的定位错误变得尤其重要,所以必须记录有效的日志。

Java代码
1.logger.error("更新文档出现出错", e); 
logger.error("更新文档出现出错", e);

6:写有效的注释

之所以说写有效的注释,是因为有时候,有些方法真的不需要写注释,如addUser,就不要在写注释“添加用户”这样的注释。关键是写有效的注释,注释的作用在于,调用方只看注释而不看代码就能知道如何使用接口,注释应该包括:输入参数的注释,输出参数的注释和异常的注释。特别是List<Map>,Sting[]这样的参数要严格说明,笔者认为Service作为一个核心层,注释必须非常详细。另外直观的方法名也能起到注释的作用。

Java代码
1./** 
2.* 批量添加文档的附件  
3.*  
4.* @param att 附件对象,附件名长度为20,附件大小为10M 
5.* @throws FriendlyCodeRuntimeException 
6. */ 
7.private void addAttachment(Attachment... attachment) 
/**
* 批量添加文档的附件
*
* @param att 附件对象,附件名长度为20,附件大小为10M
* @throws FriendlyCodeRuntimeException
*/
private void addAttachment(Attachment... attachment)


分享到:
评论

相关推荐

    java后端开发规范.docx

    正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion 2. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase...

    Jersey Java规范下REST风格Web Service开发框架

    Jersey Java规范下REST风格Web Service开发框架

    百宝箱业务应用程序开发规范-JAVA分册

    百宝箱业务应用程序开发规范-JAVA分册 Develop Specification of Java Service 版本号: ZV2.0.0 &lt;br/&gt;中国移动通信集团公司 发布

    阿里Java开发编程规范word版

    1. 【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下...正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion ...

    java命名规范 开发规范

    d. 开发Service接口和Service接口实现,并在Action中通过set方法注入该Service; 接口文件:UserService 接口实现:UserServiceImpl 注入Service e. 开发DAO,DAO继承com.hikvision.xxx.HibernateBaseDAO; 示例 f...

    Jbone开发规范1

    代码结构规范核心模块DAO包规范config:数据源配置domain:ORM实体类repository:JPA接口定义核心模块Service包规范model:对

    Service Data Objects (SDO) Programmer Guide

    Service Data Objects (SDO)开发指南

    Javashop开发规范V2.2

    Javashop开发规范V2.2 版本 说明 提交人 V1.0 初稿 定义了包名、异常、事务、和路径的规范 王峰 V2.0 1. 重新整理了命名规范 2. 增加常用命词对照表 王峰 V2.1 1.增加数据库操作的说明 2.增加常用方法介绍 王峰 V...

    web Service 实例教程

    Web Service 简单实例,JAVA中的Web服务规范等,完整的客户端于服务端的开发流程。

    servicebroker:Open Service Broker API规范

    文档提供了示例Service Broker,框架和库的列表,这些列表对于希望实现平台或Service Broker的开发人员可能有用。 文档是一种快速的方法,可以跟踪当前和未决功能添加的状态,它们如何与发行版保持一致以及当前支持...

    JavaScript 开发规范要求(图文并茂)

    本人在开发工作中就曾与不按规范来开发的同事合作过,与他合作就不能用“愉快”来形容了。现在本人撰写此文的目的除了与大家分享一点点经验外,更多的是希望对未来的合作伙伴能够起到一定的借鉴作用。当然,如果我说...

    java web service 入门

    这里较详细的介绍java 开发web service 的技术规范。更多的只是为了供开发人员参考,少走弯路。 web service 开发涉及的内容很多。包括:xml方面,这里有一块,wsdl,xml shceme,soap等要了解。

    普元等18家厂商联合制定简化SOA应用开发规范

    日前18家致力于联合推动创建SOA(面向服务的架构)行业标准的厂商,宣布了SCA (Service Component Architecture,服务组件架构)和SDO(Service Data Objects,服务数据对象)规范中关键部分的完成,并将正式提交...

    DataService-操作手册.docx

    SAP DataServices 技术文档(英文) 非常详细的SAP DataServices技术文档,包含所有控件的使用,调优。DataServices 开发规范,操作手册。

    Springmvc开发实例和规范

    springmvc基于方法开发的,struts2基于类开发的。springmvc将url和controller里的方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。...springmvc的controller开发类似web service开发

    service-worker-demo:Service Worker 的小演示

    Service Worker 是浏​​览器的新规范,用于解决离线问题并提供 Web 应用程序功能,而这些功能仅适用于本机应用程序。 Service Worker API(在 Chrome Canary 中)的当前实现专注于支持规范的离线功能,但它也可以...

    JavaScript开发规范要求(规范化代码)

    本人在开发工作中就曾与不按规范来开发的同事合作过,与他合作就不能用“愉快”来形容了。现在本人撰写此文的目的除了与大家分享一点点经验外,更多的是希望对未来的合作伙伴能够起到一定的借鉴作用。当然,如果我说...

    MyEclipse下开发Web Service(Axis)

    本文主要描述如何使用Apache开源项目Axis提供的API来实现Web Services。本文中的提到的例子只为了方便本文的描述而提出,者应有JAVA web ...应该具有看过WSDL,SOAP,XML等的基本规范。熟悉Eclipse+MyEclipse开发环境

    Web Service 入门

    这里较详细的介绍java 开发web service 的技术规范。更多的只是为了供开发人员参考,少走弯路

Global site tag (gtag.js) - Google Analytics