为表现层和业务逻辑层。
4.2.1 分层体系结构的特点
由于每个应用程序采用的框架不同,因此不可能提供一个适合于所有软件的分层体系结构。但是在任何框架下体系分层包括以下特征:
1.每个层由一组相关的类或组件(如EJB)构成,共同完成特定的功能。
2.层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件。例如表现层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。
3.每个层对上层API,但具体的实现细节对外透明。当某一层的实现发生变化,只要它的API不变,不会影响其它层的实现。
根据Struts、Spring、Hibernate的特点和监控系统需求,把整个系统分为:表现层、业务逻辑层和持久层。
表现层:提供与用户交互的信息,验证数据有效性以及调用数据库层。GUI(图形用户界面)和Web页面是表现层的两个典型的例子。
业务逻辑层:实现各种业务逻辑。例如当用户发出生成订单的请求时,业务逻辑层负责把订单信息保存到数据库中。
持久层:负责存放和管理应用的持久性业务数据。
4.2.2 表现层的设计
表现层主要是数据验证有效性以及页面的交互信息。每一个操作都要有一个表单类来与之对应。
Struts框架的视图负责为客户提供动态网页内容。Struts视图主要由JSP网页构成;此外,Struts框架还提供了Struts客户化标签和ActionForm Bean,这些组件提供对国际化、接收用户输入的表单数据、表单验证和错误处理等的支持,使开发者可以把更多的精力放在实现业务需求上。
4.2.3 业务逻辑层的设计
业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件。开发者需要对业务对象建模,抽象出业务模型并封装在Model组件中。由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。Spring的IOC容器负责统一管理Model组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。
在用户登陆模块中,通过业务建模创建了用户模型LoginService类,封装了对用户的权限管理以及访问管理等功能。LoginService类通过调用数据访问类SysUserDAO实现对用户数据的操作。
对于业务逻辑层的方法都需要加入事务,通过Spring的AOP就可以轻松解决。
4.2.4 持久化层的设计
数据持久层由Java对象持久化类和数据访问对象(DAO)组成。每个数据库表都对应着一个持久化对象,这样就给予了开发者使用OO思想设计和开发的便利,同时也屏蔽了具体的数据库和具体的数据表、字段,消除了对数据库操作的硬编码在重用性上的弊端。
用户信息表的部分结构如表4-1所示。
表4-1 sys_user系统用户表
字段名 数据类型 长度 是否为空 userid number 10 否 username varchar2 50 否 password varchar2 50 否 userroleid number 10 否 user_flag varchar2 10 否 持久化类需要与数据库的表一一对应,因此建立类SysUser。其中,类的属性要与表sys_user的字段一一对应并且要注意Bean的命名规则,如字段user_id对应持久化类的属性名应为userId[9]。
持久化类SysUser对应自己的DAO,SysUserDAO。该DAO内封装了所有对表sys_user的操作。典型的操作如"检验用户名是否存在"。对应的实现类代码如下:
public interface SysUserDAO {
/*检验用户名是否存在*/
public List
findByUserName(String userName) ;
}
public class SysUserDAOImpl extends HibernateDaoSupport implements SysUserDAO {
/*检验用户名是否存在*/
public List findByUserName(String userName) {
return null;
}
}
4.2.5 各层次之间的关系
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用