一.架构的分层
分层开发
分层的概念:
分层概念有不同层面的应用,通常,我们的应用从大的层面,都可以分为表现层、业务层、集成层、资源层等,这些系统构架层面的分层是在做系统构架时就做好的,
我们不需要太多考虑,但在比较细粒度的层面,我们还可以分层,主要是在代码层面分层。
代码分层的一个指导思想就是:一个类只做一件相关的事,保持其纯粹性,比如validator类就只做校验,业务类里面就只有业务方法,
系统的远程访问方法就只处理远程方法,事务类就只做事务处理,不要将不同层面类型的工作混合在一个类中实现,有这样的情况就需要考虑到重构了。
分层开发的效率:
通常我们做的信息管理应用开发,侧重于复杂的业务逻辑,这个时候,系统的层次结构,清晰性,可维护,可扩展性要比性能问题来的重要的多,
而性能我们可以通过加硬件配置做垂直扩展,也可以通过添加机器设备,通过集群的方法做水平扩展,效率问题是比较好解决的。
更重要的是,硬件设备有一个摩尔定理,每18个月CPU性能翻一倍,价格降一半,但软件不是这样的。
业务人员:与开发人员沟通业务需求。
系统设计:定义系统的构架,技术实现和设计。
页面美工:为应用系统做网页。
开发人员:具体编码。
配置人员:为iBATIS、 EJB等配置相关文件,由属性某技术的专业人员来配置。
测试部署人员:为应用做单元测试和集成测试和部署工作等。
版本控制人员:做版本管理。
1、Web层
数据绑定:是指把web页面提交的参数转换为一个数据对象的操作。
数据校验:检验提交的数据格式是否正确,字段是否为空。一般不查询数据库。
2、业务层
业务层是J2EE应用的核心,它提供客户应用所需要的业务服务,包含业务数据和业务逻辑。通常情况下,绝大部分的业务处理集中在这一层。
数据校验:web层和业务层的校验似乎是重复,但是业务层的校验即使重复也不容省去,因为业务层不能依赖web层来保证数据的完整性,
特别是当业务层需要以某种方式让外部系统调用的时候,更是无法依靠web层数据校验来保证业务层的数据完整性。
一般Service封装了BO和DAO以提供粗粒度的服务。
作为SOA(Service Oriented Architecture,面向服务架构)的关键组成部分,Service也可以向外部系统提供服务。
Service可以有层次结构,在复杂的系统中,会有很多细粒度的Service,这些Service又可以被包装成更粗粒度的Service,
用户的业务逻辑的层次结构主要通过Service的不同层次结构来表现。
BO(Business Object,业务对象)是一个完整的业务实体,包含属性和方法。
比如业务系统中的客户、机动车、业务员、保单、险种、股票、基金、申请书等都是业务实体。
BO对象需要持久化,即BO 对象的状态(各属性的值)需要存储在数据库中,所以BO对象需要在数据库中有一个或多个表和它对应。
当应用复杂的时候,可以将BO分成若干层次,用粗粒度的BO封装细粒度的BO。
PO概念,即Presist Object,持久化对象。职责是为DAO存储数据服务,校验存储数据,保证存储数据的完整性。
与DTO区别:DTO为Services/Action服务,PO为DAO服务。
DTO以业务逻辑为核心,PO以存储为核心。
DTO可用于Services、Action、Web层、关联系统,
PO仅可用于DAO内部。DTO不与表对应,PO分担DTO的职责,希望系统中因为Services需要而建DTO,而不是因为加了表就加个DTO。
DTO与PO相互转换:DAO接口的参数为DTO,在DAO实现类中,DTO转换为PO后,进行增改。查询结果不使用PO,sqlmap直接映射DTO。
PO是DAO内部使用的对象,用于数据库的insert和update。
3、集成层
在J2EE应用中,集成层负责资源集成,例如和数据库交互,访问外部系统。
比如:组件DAO用于和数据库交互,组件SAO用于访问外部系统。
4、核心层:
core层的核心角色是一个轻量级的容器(Light Weight Container),所谓轻量级是相对于EJB容器而言(一般认为EJB容器属于一个重量级容器)。
EJB运行在EJB容器内,容器负责管理EJB的生命周期,提供底层服务,如事务处理、权限控制等,EJB容器只能为EJB提供服务。
core层负责管理各种bean(包括POJO bean和EJB),提供比如数据访问,日志等的支持。
5、定时器:
6、日志组件:
1.错误日志
用途:记录程序中异常信息,便于系统做除错,它在生产环境是不能够关闭的。
2.跟踪日志
用途:记录用户使用某个系统功能的完整流程,便于开发人员查看代码的执行调用过程。
用于开发过程或者系统上线初期,在系统稳定后,可以通过配置文件将该日志去掉,以提高性能。
3.审计日志
用途:保存用户业务行为相关的信息,主要是用来保留用户和业务的相关的记录。
4.DevLog
用途:是一个辅助工具类,只用于开发阶段调试程序使用,它替代System.out.println语句。在生产环境应该通过配置禁止该日志。
DevLog的日志消息按重要性分为trace, debug, info, warn, error, fatal六个级别(由低到高),通过配置文件可以设定打印某个级别(以上)的消息。
在生产环境,可以通过配置文件禁用日志功能。
7、异常处理:
异常处理原则
异常处理要解决的问题有两个:
1.要捕获哪些异常,即哪些代码要包含在try{}代码块里面?
2.捕获到了异常之后怎么办,即在catch{}代码块里面要做什么?