东北大学本科生毕业设计(论文)专用纸
第 4 章 系统的设计与实现
程序设计又称编码,是系统生命周期中继详细设计之后的阶段,这个阶段的任务是使用选定的程序设计语言,把经过概要设计和详细设计所得到的以程序设计说明书体现的信息处理过程描述后,转换成能在计算机系统上运行的程序源代码。
4.1 系统框架实现
在系统的整体设计中,我们采取了四层结构.这样结构的优点是灵活,移植和可维护性比较高. 每个层在处理程序上都应该有一项明确的责任, 而不应该在功能上与其它层混合,并且每个层要与其它层分开的
图4.1 S.S.H框架的结合使用
4.1.1底层数据库的建立
在前期的数据库选用中,本系统选取了灵活高速的 MySQL数据库,而在数据库的设计中,本文已经确立了表结构. 根据这些就可以创建一个数据库,在数据库创建并连接好后,就可以创建表、修改表和删除表,创建、修改、和删除主键、外键等等。选中“leafbbs”数据库,use database并使用Create table<表名>Sql语句,依次创建以下表结构。由于考虑到本系统是应用在单机系统上,另外根据管理的规模,我们只建立一个数据库,在此数据库基础上建立
31 --
东北大学本科生毕业设计(论文)专用纸
leafbbs_userinfo 用户基本资料表 leafbbs_userdetai 用户详细信息表 leafbbs_forum 论坛文章表 leafbbs_board 论坛版区表 leafbbs_config 论坛初始化信息表
4.1.2持久化层的建立(hibernate)
典型的Web应用的另一个末端是持久层。Hibernate为java提供了OR持久化机制和查询服务, 它还给已经熟悉SQL和JDBC API 的Java开发者一个学习桥梁,他们学习起来很方便。 Hibernate的持久对象是基于POJO和Java collections。此外。
系统建立Hibernate的持久层 。 首先把BO持久化。 Hibernate是通过POJO工作的, 因此数据对象需要给所有的fileds 加上getter,setter方法。 Hibernate通过XML文件来映射(OR)对象,以下xml文件分别映射了相应对象。
1.userinfo.hbm.xml 2.userdetai.hbm.xml 3.forum.hbm.xml 4.board.hbm.xml 5.config.hbm.xml
32 --
东北大学本科生毕业设计(论文)专用纸
图4.2 userinfo.hbm.xml 映射文件
本系统可以在com.leafbbs.bean目录下找到这些xml文件。Hibernate配置文件的作用用来告诉程序 应该与哪个数据库通信,该使用哪个连接池或使用了DataSource, 应该加载哪些持久对象。而Session接口是用来完成Selecting,Saving,Delete和Updating这些操作。
4.1.3业务逻辑层的建立
本系统的业务逻辑是交由struts中的Action进行判断的,比如判断登陆的业务逻辑时,会建立一个LoginAction类来进行逻辑判断,而一些关联的映射,LeafBBS系统是写在struts框架的struts-config.xml中.
33 --
东北大学本科生毕业设计(论文)专用纸
图4.3 struts-config.xml 映射文件
从编码的视角来看,这层是最容易被忽视的一层。 却往往在持久层周围看到这些业务处理的代码,这其实是不正确的,因为它导致了程序代码的紧密偶合,这样一来,随着时间推移这些代码很难维护。幸好,针对这一问题本系统可以使用Spring框架来解决.spring框架都着手于“依赖注射”(dependency injection)(还有我们知道的‘控制反转'Inversion of Control=IoC)这样的简单概念。Spring还提供了Setter Injection(type2),Constructor Injection(type3)等方式供选择。 Spring把程序中所涉及到包含业务逻辑和Dao的Objects——例如transaction management handler(事物管理控制)、Object Factoris(对象工厂)、service objects(服务组件)——都通过XML来配置联系起来。这种方式让你的对象从创建中释放了出来,降低了偶合度.
34 --
东北大学本科生毕业设计(论文)专用纸
图4.4 spring 配置文件 applicationContext.xml 映射文件
每个对象都可以在Spring 配置信息applicationContext.xml中用
Bean
有
个
sessionFactory
属
性
。
HibernateTransactionManager有个sessionFactory setter 和 getter方法,这是用来在Spring启动的时候实现\依赖注入\(dependency injection)的。 在sessionFactory 属性里 引用mySessionFactory。这两个对象在Spring容器初始化后就被组装了起来了。 这样的搭配让你从 单例(singleton objects)和工厂(factories)中解放了出来,降低了代码的维护代价。 mySessionFactory.的两个属性,分别是用来注入mappingResources 和 hibernatePropertes的。
35 --