2.2 用户登录模块设计
用户登录模块,即用户从浏览器输入个人信息,由系统在数据库中检索数据,然后验证用户信息,如果验证成功登陆到系统界面,否则,提示用户信息出错。
2.2.1 数据持久层设计
数据持久层基于Hibernate架构,采用了DAO设计模式。在持久层设计中,包括了以下三个重要设计步骤:
首先,把用户信息封装为VO(Value Object)。VO是一组值对象,只包含了一些属性和getter/setter方法的POJO(Plan Old Java Bean)。典型设计如下:
public class OrAdmin implements Serializable{ private String adminname; public String getAdminname() { return adminname; } Public void setAdminname(String adminname) { this.adminname = adminname; } …… }
|
其次,采用了DAO设计模式和抽象工厂设计模式,完成了 DAO工厂和Hibernate 数据库操作的具体实现,典型设计如下:
public abstract class DAOFactory { public static DAOFactory getInstance() {} public abstract AdminDAO createAdminDAO(); } public class AdminDAOImpl implements AdminDAO { public OrAdmin getAdmin(String adminName) { try { Session s =HibernateUtil.currentSession(); Query query = s.createQuery("from OrAdmin as oa whereoa.adminname='"+adminName+"'"); }…… return null; } }
|
最后,利用了Hibernate的配置文件完成从应用程序到数据库的映射,典型设计如下:
org.postgresql.Driver
jdbc:postgresql://127.0.0.1:5432/DBInfo
org.hibernate.dialect.PostgreSQLDialect
……
|
在该层的设计中,VO的信息封装体现了面向对象设计编程思想;DAO的设计模式和抽象工厂模式减弱了上层调用和具体实现之间的耦合;Hibernate配置实现了数据库高移植性,只需要改变Hibernate配置文件,不用修改程序设计就可以完成不同数据库之间的更换。
2.2.2 业务逻辑层设计
业务逻辑层包含了供客户端程序调用的业务逻辑规则,以帮助客户端完成业务操作。该层采用了业务代理、DAO和抽象工厂设计模式,典型设计如下:
public class ManagerFactory { public static AdminManager createAdminManager(){ return new AdminManagerImpl(); }} public interface AdminManager { OrAdmin getAdmin(String username); } public class AdminManagerImpl implements AdminManager{ private AdminDAO dao = DAOFactory.getInstance().createAdminDAO(); public OrAdmin getAdmin(String username) { return this.dao.getAdmin(username); } }
|
在该层的设计中,业务代理、DAO和抽象工厂设计模式的使用,使业务逻辑更加灵活,如果具体业务发生变化,在表示层和数据持久化层改变很小就可以完成改变,这种设计增强了系统的可维护性和灵活性。
2.2.3 表示层设计
表示层基于Struts框架,采用了JSTL标签库技术。在表示层的设计中,主要包括了以下三个重要设计步骤:
首先,建立用于用户浏览的JSP视图页面,其中最重要的是设计出封装用户表单信息的ActionForm。ActionForm是Struts架构的重要组件,是包含了一些属性和getter/setter方法的POJO,典型设计如下:
public class AdminActionForm extends ActionForm { private String adminname; public String getAdminname() { eturn adminname;} public void setAdminname(String adminname) { his.adminname = adminname; } …… }
|