论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

smart系统-系统框架设计与开发(论文+程序)

4.2.2    系统接口设计

Java程序设计语言提供了两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类。两种机制之间最明显的区别是,抽象类允许包含某些方法的实现,但是接口是不允许的。一个更为重要的不同之处在于,为了实现一个由抽象类定义的类型,它必须成为抽象类的一个子类。任何一个类,只要它定义了所有要求的方法,并且遵守通用约定,那么它就允许实现一个接口,不管这个类位于类层次的哪个地方。因为Java只允许单继承,所以,抽象类作为类型定义受到了极大的限制。接口使得我们可以构造出非层次结构的类型框架。例如:假设有一个接口代表一个singer(歌唱家),另一个接口代表一个songwriter(作曲家):

paper51.com

public interface Singer{ copyright paper51.com

   AudioClip Sing(Song s); paper51.com

} http://www.paper51.com

public interface SongWriter{

内容来自论文无忧网 www.paper51.com

   Song compose(boolean hit);

内容来自www.paper51.com

} copyright paper51.com

在现实生活中,有些歌唱家本身也是作曲家。因为是使用接口而不抽象类来定义这些类型,所以对于一个类而言,它同时实现Singer和Songwriter是完全允许的。实际上还可以定义第三个接口,它同时扩展了Singer和Songwriter,并且加入一些适合于这种组合的新方法:

http://www.paper51.com

   public interface SingerSongwriter extends Singer,Songwriter{ copyright paper51.com

       AudioClipstrum();

内容来自www.paper51.com

       VoidactSensitive(); paper51.com

} http://www.paper51.com

如果要满足这样的一种灵活性,抽象类是不可能完成的。

copyright paper51.com

虽然接口不允许包含方法的实现,但是,使用接口定义类型并不妨碍你为程序员提供实现上的帮助,在本系统的接口设计与实现中借鉴了Java API中的将接口类与抽象类的优点结合起来,将期望导出的每一个重要接口,都提供一个抽象类的骨架实现(skeletal implementation)类。按照惯有编码命名习惯,将该骨架实现类命名为AbstractInterface

在该系统中采用这种方式的来设计的接口有Business(业务)接口,DAO(数据访问对象)接口。 内容来自www.paper51.com

4.2.3    自定义标签的设计

在对系统的实现中,由于在表现层使用的是基于MVC的Struts框架,该框架中为了在表现层的JSP页面中不混合大量的Java代码,及保持JSP页面的程序的容易读性而提供了相应的Struts自己的一套标签,但是考虑到本系统的实际应用的功能实现。且这些功能实现又是Struts标签没法满足要求的,因此在该系统框架中实现了自己的一套标签,主要有<smart:submit></smart:submit>,<smart:select></smart:select>。

内容来自www.paper51.com

1.     <smart:submit>标签:

内容来自论文无忧网 www.paper51.com

设计意图: 内容来自论文无忧网 www.paper51.com

在一般的基于B/S结构的web应用系统中,在页面上经常是会涉及到添加、编辑、删除几种常用的功能,在早期的一些开发编码中,相当一部分人是将这几种功能分为多个页面来实现,例如:添加用一个add.jsp页面,编辑用一个edit.jsp页面,删除用一个delete.jsp页面。而这些的页面的代码80%以上都基本上是一样的,只不过是上显示的按钮及在点击相应的提交给后台处理方法不一样。为了达到在一个页面上面实现添加、编辑、删除功能,并且要保持页面代码的清晰可读性,因此,在本系统框架中,封装了自定义的提交标签。 内容来自www.paper51.com

表1 <smart:submit>标签属性列表

paper51.com

属性名称 copyright paper51.com

属性描述

内容来自论文无忧网 www.paper51.com

备注 内容来自论文无忧网 www.paper51.com

Id

http://www.paper51.com

该标签元素的id 。 copyright paper51.com

Name

paper51.com

该标签元素的名称。 copyright paper51.com

Property

paper51.com

当点击该标签所显示的内容后所提交的参数名称 内容来自论文无忧网 www.paper51.com

Message

copyright paper51.com

该标签在页面上所显示的值,等同于html标签组里面的input标签的value属性。

paper51.com

displayControl 内容来自www.paper51.com

是否要对该标签的内容是否在页面上显示出来作控制。 paper51.com

只有两种值

内容来自论文无忧网 www.paper51.com

true/false

copyright paper51.com

Image

paper51.com

该标签在页面显示的内容的背景图片。

内容来自www.paper51.com

onClick

内容来自论文无忧网 www.paper51.com

当点击该标签所展现的内容后所触发的事件。 http://www.paper51.com

2.     <smart:select>标签:

内容来自论文无忧网 www.paper51.com

设计意图:

copyright paper51.com

在一般的基于B/S结构的web应用系统中,在页面上经常要用到下拉框,且在JSP页面加载出来时就有一组相应的值,为了在加载该页面时动态的、带条件的取其标签相应的键/值对,因此,在本系统框架中,封装了自定义的下拉菜单。

copyright paper51.com

表2 <smart:select>标签属性列表

paper51.com

属性名称 http://www.paper51.com

属性描述 copyright paper51.com

备注 http://www.paper51.com

name

copyright paper51.com

该标签元素的名称。

内容来自论文无忧网 www.paper51.com

property

copyright paper51.com

该标签元素属性名称,与Struts中的html标签的property元素是一样的含义,对应于FormBean里面的一个域。 paper51.com

content 内容来自www.paper51.com

该标签属性为标签取值的业务代码。 http://www.paper51.com

multiple

内容来自论文无忧网 www.paper51.com

该属性同html标签组中的select标签的multiple属性。 paper51.com

size 内容来自www.paper51.com

该属性同html标签组中的select标签的size属性。

paper51.com

style

copyright paper51.com

该属性同html标签组中的select标签的style属性。

http://www.paper51.com

relationValue 内容来自论文无忧网 www.paper51.com

该属性为在加载该标签相应的值时的条件。 paper51.com

4.2.4     基于Struts表现层设计

大部分基于B/S结构的web应用系统中,在页面上经常会出现一个以上的功能按钮,而这些功能按钮基本上都是对应于后台的一个操作实现,由于在本系统中的表现层选用较为成熟Struts框架,该框架中最为核心的部分要属控制器控制转发相应的HttpRequest,其中的LookupDispatchAction类是允许你指定一个具有多个方法的类,每一个方法的调用都基于配置文件中指定的一个特殊请求参数值,利用该参数值反向查询资源绑定,并将它与类中的一个方法进行匹配。从这些功能可以看出Struts是满足对系统页面上多个功能按钮与实现的绑定。

内容来自论文无忧网 www.paper51.com

因此,在对本系统进行架构设计的时候,考虑建立一个抽象的BaseAction类,该类继承LookupDispatchAction,实现LookupDispatchAction类中的getKeyMethodMap方法,在方法中返回本系统中请求参数值与资源文件中参数值的键/值对。实现一些对于所有的Action都是有可能用到的公共方法,包括从session中得到用户的信息;对页面上按钮是否显示的控制;检查用户权限;对公共业务逻辑接口的调用等等。在涉及到系统的具体开发实现的时候,要求所有开发人员在写自己的Action的时候统一继承BaseAction。

http://www.paper51.com

4.2.5    基于Hibernate持久层设计

本系统的持久层是基于开源的Hibernate来实现的,在了解到相关的Hibernate特性后,在本系统的框架中,从如下几个方面对其进行了进一步的封装。

copyright paper51.com

1.     对产生Session实例进行封装 http://www.paper51.com

设计意图: paper51.com

Session是Hibernate持久化操作的基础。注意这里Session的含义,它与传统意义上的Web层的HttpSession并没有什么关系。Hibernate Session之与Hibernate,相当于JDBC Connection与JDBC。

内容来自www.paper51.com

Session作为贯穿Hibernate的持久化管理器核心,提供了众多持久化方法,如save、update、delete,find等。通过这些方法即可透明地完成对象的增删改查(CRUD)。但是值得注意的是,Hibernate Session的设计是非线程安全的,也就是说,一个Session实例同时只可由一个线程使用,同一个Session实例的多线程并发调用将导致难以预知的错误。

copyright paper51.com

因此在本框架中对通过SessionFactory所产生的Session。进行了线程安全性的处理,在实现的HibernateSessionFactory类新建一个Java中的ThreadLocal类,将每次产生Session放入该类中,这样就达到了线程安全性的效果了。 paper51.com

当产生Session而创建SessionFactory实例时,也要注意对SessionFactory重用的问题,因为SessionFactory中保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级缓存和Statement Pool。由此可见,SessionFactory的创建过程必然非常复杂、代价高昂,而这也意味,在系统设计中要充分考虑到SessionFactory的重用策略。由于SessionFactory采取了线程安全的设计,可由多个线程并发调用,大多数情况下,一个应用中针对一个数据库共享一个SessionFactory实例即可。 内容来自www.paper51.com

内容来自www.paper51.com

------分隔线----------------------------
联系方式