`

在企业级web分层式应用中异常架构设计

    博客分类:
  • java
阅读更多
  做java开发已经有几年了,所面对的项目有大也有小,这些项目就整体上的设计方式无外乎就一种,那就是分层设计,一般分为dao,service,action这几层,有的项目结构为:dao,daoimpl,service,serviceimpl,action,看这些项目中都没有对异常进行很好的处理,一些项目几乎没有对异常信息进行过什么处理,而我认为,一个好的异常处理的设计对于提高开发效率是必不可少的,在项目完成后,出现问题也容易定位问题所在,下面给出我项目中采用的异常架构的处理,以部门信息为例:
dao接口,代码为:
/**
	 * 根据传入的部门主键查找对应的部门
	 * @param id部门的主键
	 * @return Department
	 */
	public Department findById(Long id) throws DepartmentDAOException;

daoimpl,代码为:
/**
	 * 根据传入的部门主键查找对应的部门
	 * @param id部门的主键
	 * @return Department
	 * @throws DepartmentDAOException 
	 */
	public Department findById(Long id) throws DepartmentDAOException {
		try {
			return (Department)this.getSqlMapClientTemplate().queryForObject("Department.getDepartmentById", id);
		} catch (Exception e) {
			logger.serious(e.getMessage(), e);
			throw new DepartmentDAOException("DepartmentDAOImpl.findById","DAOException",e);
		}
	}


service接口,代码为:
/**
	 * 根据传入的部门主键查找对应的部门
	 * @param id部门的主键
	 * @throws DepartmentServiceException
	 * @return DepartmentVO
	 */
	public DepartmentVO doFindById(Long id) throws DepartmentServiceException;


serviceimpl,代码为:
/**
	 * 根据传入的部门主键查找对应的部门
	 * @param id部门的主键
	 * @throws DepartmentServiceException
	 * @return DepartmentVO
	 */
	public DepartmentVO doFindById(Long id) throws DepartmentServiceException {
		try {
			Department pojo = departmentDAO.findById(id);
			DepartmentVO vo = new DepartmentVO();
			BeanUtils.copyProperties(vo, pojo);
			return vo;
		} catch (Exception e) {
			logger.serious(e.getMessage(), e);//这个日志级别是自定义的,对log4j源码进行了修改
			throw new DepartmentServiceException("DepartmentServiceImpl.doFindById","ServiceException",e);
		}
	}


自己包装了DepartmentDAOException,DepartmentServiceException,它们都继承自BaseException,BaseException又继承Exception,在打印异常信息时采用log4j不采用java里面的打印堆栈语句,这样做的好处是我们可以控制异常信息的打印与否,比如在给客户演示时,数据库里的数据不完整,我们并不希望客户看到这些信息,另一方面客户期望的是一个没有问题的系统,客户并不关心这些,我们可以通过这种方式不打印异常信息,只是把这些异常信息写入日志,过后我们检查日志,定位问题。
关于代码中使用的logger.serious,在log4j中并不存在,我是修改了源码,加入了一个日志级别,可以参考我的另一篇文章《为log4j增加日志级别》,下层的异常一层层向上抛,抛到action进行处理,写入日志或是通过struts进行处理等等,或许有人认为这样处理太麻烦了,麻烦是麻烦了点,不过带来的好处只在亲身体验过就知道了,当然这只是一种处理方法,不知道还是没有更好的处理办法
分享到:
评论

相关推荐

    Spring Boot带前后端 渐进式开发企业级博客系统

    在企业级应用中被广泛使用。本章节不会对该框架做深入探讨,仅从基于角色的权限管理角度,来实现对系统的权限管理。 第12章 博客系统的整体框架实现 先对系统的整个界面、结构、布局、API进行实现,这样方便每个...

    SpringBoot企业级博客系统(未加密+源码)

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,在企业级应用中被广泛使用。本章节不会对该框架做深入探讨,仅从基于角色的权限管理角度,来实现对系统的权限...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    中型企业网络设计与仿真毕业设计.doc

    软件设计 就是在这些硬件的基础上实施各种高级的应用服务如DNS、DHCP、WEB、FTP和各种企业应 用软件和数据库系统。 第2章 需求分析 企业网(ENTERPRISE NETWORK)是非常典型的综合网络实例。在本设计方案中主要是对...

    中型企业网络设计与仿真毕业设计(1).doc

    软件设计 就是在这些硬件的基础上实施各种高级的应用服务如DNS、DHCP、WEB、FTP和各种企业应 用软件和数据库系统。 第2章 需求分析 企业网(ENTERPRISE NETWORK)是非常典型的综合网络实例。在本设计方案中主要是对...

    asp.net知识库

    在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 ...

    Spring面试题

    ☆ Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域...

    代码之美(中文完整版).pdf

    本书给出了38位大师级程序员在项目设计中的思路、在开发工作中的权衡,以及一些打破成规的决策。 第1章 正则表达式匹配器 。 1.1 编程实践 1.2 实现 1.3 讨论 1.4 其他的方法 1.5 构建 1.6 小结 第2章 Subversion中...

    网亚B2C商城系统 2.5.0.1.rar

    网亚B2C商城系统,是创想商务拥有独立产权自主开发,基于WEB应用的B/S架构B2C网上商城系统,主要面向企业或个人构建单用户商城提供友好的解决方案,最大化满足客户目前及今后的独立商城应用需求。该系统运行于微软...

Global site tag (gtag.js) - Google Analytics