Java EE 应用概述
Java EE 应用提供的跨平台、开放性以及各种远程访问技术,为异构系统的良好整合提供了保证。
Java EE 应用的分层模型
Java EE 应用大致都可分为如下几层:
- Domain Object(领域对象)层。此层由一系列的 POJO( Plain Old Java Object,普通的、传统的 Java 对象)组成,这些对象是该系统的 Domain Object(领域对象),往往包含了各自所需实现的业务逻辑方法。
- DAO( Data Access Object,数据访问对象)层。此层由一系列的 DAO 组件组成,这些 DAO 实现了对数据库的创建、查询、更新和删除( CRUD )等原子操作。( DAO 层在 MyBatis 中也被称为 Mapper 层,其通过 SQL 语句的映射完成 CRUD 操作)。DAO 层主要做数据的持久化工作,其设计的总体规划需要与设计的表和实现类之间一一对应。
- Service(业务逻辑)层。此层由一系列的业务逻辑对象组成,这些业务逻辑对象实现了系统所需要的业务逻辑方法。这些业务逻辑方法可能仅仅用于暴露 Domain Object 对象所实现的业务逻辑方法,也可能是以来 DAO 组件实现的业务 逻辑方法。(中间层上下衔接,既应调用 DAO 层接口,有提供接口供 Controller 层的类来近行调用。)
- Controller(控制器)层。此层由一系列控制器组成,这些控制器用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果向不同的表现层组件转发。
- View(表现)层。此层由一些列的 JSP 页面、Velocity 页面、PDF 文档视图组件组成,负责收集用户请求,并显示处理结果。
总的来说,各层的 Java EE 组件之间以松耦合的方式耦合在一起,各组件并不以硬编码的方式耦合,这种方式是为了应用以后的扩展性。从上向下,上面组件的实现依赖于下面组件的功能;从下向上,下面组件支持上面组件的实现。Java EE 架构提供了良好的分离,隔离了各组件之间的代码依赖。
Java EE 应用的组件
Java EE 应用大致包括如下几类组件:
- 表现层组件。主要负责收集用户输入数据,或者向客户显示系统状态。最常用的表现层技术是 JSP,但 JSP 并不是唯一的表现层技术。表现层还可由 Velocity 、 FreeMarker 和 Tapestry 等技术完成,或者使用普通的应用程序充当表现层组件,甚至可以是小型智能设备。
- 控制器组件。对于 Java EE 的 MVC 框架,其提供一个前端核心控制器,核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。这些用户实现的控制器组件则负责调用业务逻辑方法,处理用户请求。
- 业务逻辑组件。这事系统的核心组件,实现系统的业务逻辑。通常,一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体,因此要求对业务逻辑方法增加事务性。业务逻辑方法仅仅负责实现业务逻辑,不应该近行数据库访问。因此,业务逻辑组件中不应该出现原始的 MyBatis、Hibernate 和 JDBC 等 API。(保证业务逻辑组件中不出现原始的 MyBatis、Hibernate 和 JDBC 等 API 的一个更重要的原因:为保证业务逻辑方法的实现,与具体的持久层访问技术分离。当系统需要在不同持久层技术之间切换时,系统的业务逻辑组件无需任何改变。)
- DAO 组件。这个类型的对象比较缺乏变化,每个 DAO 组件都提供 Domain Object 对象基本的创建、查询、更新和删除操作,这些操作对应于数据库的 CRUD (创建、查询、更新、删除) 等原子操作。采用不同的持久层访问技术,DAO 组件的实现会完全不同。为了业务逻辑组件的实现与 DAO 组件实现分离,程序应该为每个 DAO 组件都提供接口,业务逻辑组件面向 DAO 接口编程,这样才能提供更好的解耦。
- 领域对象组件。领域对象( Domain Object )抽象了系统的对象模型。通常而言,这些领域对象的状态都必须保存在数据库里。因此,每个领域对象通常对应一个或多个数据表,领域对象通常需要提供对数据记录的访问方式。
Java EE 应用的结构和优势
对于信息化系统,前期开发工作对整个系统工作量而言,仅仅是一小部分,而后期的维护、升级往往占更大的比重。更极端的情况是,可能在前期开发期间,企业需求已经发生了变化,而这种改变是客观的,软件系统必须适应这种改变,这要求然间系统具有很好的伸缩性。这种框架结构其目的是让应用的各组件以松耦合的方式组织在一起,让应用之间的耦合停留在接口层次,而不是代码层次。