论文部分内容阅读
摘要:本文在原有的多层架构基础之上。重新抽象出七层系统架构,并对各层的特点和技术实现进行了较为细致阐述。
关键词;出口退税管理系统;系统架构:七层架构
中图分类号:TP311.1
文献标识码:A
文章编号:1002-2422(2010)05-0045-03
1 总体架构设计
1.1设计约束分析
在出口退税系统设计时,需要注意下列约束限制:
(1)开发的系统本身定位为现有系统的补充和扩展,所以不能对原审核系统数据安全性造成影响,也不能影响原系统工作业务流程。同时,在数据库的设计和使用上必须保证与原系统编码的一致。
(2)必须充分利用税务系统软硬件资源及现有网络架构,避免增加新设备。
1.2数据分布模式选择
数据分布模式是指数据在地市税务局集中存放,市局退税机关和县区征收分局不设本地数据库服务器。数据分布模式的特点为:数据集中、无冗余,数据一致性好。便于管理和维护,系统维护成本低。网络扩展性强,数据安全性较好。业务监控能力最强。但同时对于市局服务器设备、网络设备、通讯线路的可靠性要求也比较高。
数据完全集中,所有查询及数据库访问操作均在市局主服务器上完成,服务器的运算负担重,数据丢失风险大。考虑到目前税务系统网络通讯建设已经比较完善,而出口退税数据量相对征收信息量还是比较小的,可以采取该模式来实施。
1.3总体架构
按照系统数据集中管理方式划分:出口退税管理系统采用总局、省局两级集中处理。
省局端系统:省局端系统主要承担出口退税业务处理,系统直接受理企业申报数据,办理出口退税业务,出口退税全部的业务数据集中在省级税务机关。
总局端系统:主要承担从全国的高度监控管理出口退税工作。其系统总体结构如图1所示。
在深入分析出口退税业务特点基础上,基于J2EE采用了7层架构:数据库层、持久层(DAO)、业务逻辑层、门户(Facade)层、代理(Delegate)层、WEB端控制层、页面展现层。同时在这7层架构之上,引入Apache Jakarta Struts的MVC模式,把视图一控制一模型进一步分离。软件架构如图2所示。
2 系统架构各层设计
2.1持久层设计
数据持久层的设计目标是为整个项目提供一个高层、统一、安全和并发的数据持久机制。完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。
系统具有业务复杂多变、数据量大、长事务处理、计算量大、多用户并发等特点,在设计和选择系统的持久层时,选择了JDBC Hibernate的持久层方案。
Hibernate是一种新的ORM映射工具,是JDBC的轻量级的对象封装。Hibernate在一定程度上解决了关系型数据库和对象之间的阻抗不匹配,使可以通过Hibernate基于数据库进行面向对象的设计和实现,从而更好地实现系统的可扩展性和稳定性。
Hibernate可以用在JDBC可以使用的任何场合,Hiber-nate不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。
Hibernate是一个和JDBC密切关联的、独立的对象持久层框架,可以搭配各种App Server、Web Server、EJB Con-Miner共同使用。Hibernate的兼容性仅同JDBC驱动、底层数据库产品间有一定的关系,和使用Java程序、App Server没有任何关系,也不存在兼容性问题。
下面根据系统的一些特点,设计了直接使用JDBC和使用Hibernate两种情况。
(1)直接使用JDBC(Procedure)。在目前的系统设计中,直接使用JDBC主要是的使用存储过程来实现业务逻辑。
存储过程由于是基于集合语言的,适合对集合数据进行处理。其优势在于:①在性能方面,由于可以充分使用数据库的优势,如可以使用服务器端游标等。同时存储过程可以不用重新编译,不用重新生成执行计划,所以存储过程适用在一些计算密集、长事务的处理场景中;②在部署和维护方面,任何存储过程的修改,不需重新编译部署前端应用程序,只需重新编译存储过程即可,所以存储过程在一定程度上也适合一些24小时运行的或业务逻辑复杂多变的系统上;③在网络传输方面,由于使用普通的SQL语句或其他操作数据库方式,均需将SQL语句传递至数据库,而存储过程只需传递存储过程所需的若干参数,可以减少由于多个业务环节而导致的应用程序和数据库之间的交互次数。
劣势在于:①在移植性方面,由于存储过程中不可避免地会采用当前数据库的一些特性,那么当系统切换到不同数据库时,无疑会带来很大的麻烦,这也是存储过程的一个先天的缺陷;②在数据库方面,如果过多的使用存储过程,会给数据库服务器带来很大的性能压力。
(2)使用Hibernate。Hibernate对数据库中的表、表间关系通过映射文件进行较好的映射,使得能够象处理对象一样操作表,而无需了解具体的数据库细节。Hibernate完成了记录至JAVA对象的映射,一种行数据处理的映射,通过Hibernate操作单条记录时会比较方便和快捷。此外,Hi-bernate在使用过程中,Hibernate会维护数据表间关系,需要维护表和对象的映射关系,这些Hibernate进行了缓存,成为一级缓存,而对动态POJO的缓存,称为二级缓存。
其优势在于:①在开发效率方面,如果在业务逻辑层,即在前端应用系统中实现业务逻辑,可以充分享受高级语言的集成开发环境带来的各种便利;同时可以使开发人员无需过多地关心数据库细节,从而可以有更多地精力投入在业务逻辑的实现上;②在设计分析方面,如果用面向对象的分析方法对业务逻辑层进行良好的设计,会使系统具有良好的可扩展性和可复用性;③在可扩展性方面,对于一些业务的变更,只需做很少的修改,如果是一些非关键字段、计算字段的增改等,甚至可以不需修改任何业务逻辑层的代码,就可实现修改。
劣势在于:在运行效率方面,由于通过Hibernate操作数据表记录,Hibernate需要将数据表记录映射成JAVA对象,建立缓存,在大数据量集合计算、处理时,没有太多性能上的优势。
2.2业务逻辑层
出口退税管理系统,几乎所有的业务逻辑运算都在E-JB端完成,并且系统具有数据量大,操作复杂,计算频繁等特点,所以业务逻辑层架构设计的好坏直接影响到整个系统的运行速度、可扩展性、可维护性、组件可重用性及开发效率等各项指标。
针对系统用户具有操作密集,交互密集,计算密集这三个特点,整个系统的架构充分考虑到这些特点,对系统架构的各个层次都进行了设计优化,主要体现在:
(1)设计模式和缓存机制的灵活运用。
(2)抛弃了重量级的实体EJB CMP和BMP,只采用 Session Bean来完成业务逻辑。目前的EJB规范中,依据EJB的应用场合和其本身的特性,共分为三种类型:实体Bean、会话Bean和消息驱动Bean。
2.3门户层
门户层位于代理层和业务逻辑层之间,主要作用是为了降低层间的通信和相互依赖关系,使某一层的修改或调整不会影响到其它层,系统在这两层之间采用统一接口的方式,门户层主要应用了Facade模式。
结构型模式Facade模式通过在子系统间提供一个Fa-eade类或接口来达到子系统间的松散藕合和低依赖。
有两种方式建立接口Facade层:一种是在代理层建立,另一种是在业务逻辑层建立。
2.4代理层
代理层位于WEB端控制层和EJB层之间,主要作用是把WEB端控制层和EJB层无缝整合在一起,完成业务逻辑并将数据展现给用户。
在系统中,WEB层和EJB层如何进行衔接是一个关键的问题,必须考虑到并行开发效率、系统运行效率、网络压力、系统耦合性等因素。因此,在本系统的软件架构设计上,在WEB层和EJB层之间引入了代理层。在系统中规定,代理层是WEB层和EJB层交互的唯一途径。代理层不但为WEB层隐藏了调用EJB的具体细节,而且为WEB层提供了统一的接口,并进行了J2EE服务器的上下文缓冲,使得系统在性能和开发效率上都得到提升。
2.5Web端控制层
在WEB端控制层引入了Apache的Struts框架。
由于出口退税系统界面较多,业务数据多样化,有时需要为同样的数据提供多个视图,使用JSP、Servlet进行控制比较复杂,所以采用MVC模式(Model-View-Controller,模型一视图一控制器),将视图、数据模型和控制从架构上进行分离,使得模块的职能更加清晰,这样对于开发和维护都比较方便,很好地实现了数据层与表示层的分离。
在MVC模式中,Model层实现系统中的业务逻辑,在系统中用JavaBean或EJB来实现,并通过代理层实现对业务层的代理;View层用于与用户的交互,通常主要用JSP来实现;Controller层是Model与View之间沟通的桥梁,可以分派用户的请求并选择恰当的视图以用于显示,同时也可以解释用户的输入并映射为模型层可执行的操作。
实现MVC模式的框架有很多种,在出口退税系统设计中采用了流行的Struts架构来实现。是由Apache软件组织提供的一套开发源代码的项目,其广泛的适应性和高度的扩展能力使其成为了目前Java的Web开发者所逐步认可的标准。
2.6缓存技术的使用
在设计中,充分估计了一些容易造成性能瓶颈的环节,从缓存机制上进行了性能优化。在数据读取,输入,输出等均有缓存机制。
特别对于交换密集型的操作,由于信息需要在客户端、WEB服务器、J2EE服务器、数据库服务器之间频繁传输,而这些数据往往在一定时间段内是不变化的,如:用户权限菜单的信息、用户可操作的企业列表、WEB服务器查找J2EE服务器的上下文环境,以及其他一些稳定的业务数据,都进行了缓存。
在考虑缓存机制时,也应充分考虑数据的变化性。被缓存的数据一旦被修改,系统立刻通知相关摸块更新缓存数据。这样不但提高了系统的性能,而且保证了用户操作的正确性。这样,在引入缓存机制之后,系统在频繁交互的重复数据环节上,性能得到了大幅度提高。
3 结束语
系统架构根据系统特点进行了合理的分层,抽象为七层,并对各层的职责分类,保证了系统的高性能、可扩展性、稳定性和模块、代码的高复用。在各层的技术实现上,采用了Hibernate、Struts、POI、依赖注入等技术框架和设计理念,保证了系统的技术前瞻性。
关键词;出口退税管理系统;系统架构:七层架构
中图分类号:TP311.1
文献标识码:A
文章编号:1002-2422(2010)05-0045-03
1 总体架构设计
1.1设计约束分析
在出口退税系统设计时,需要注意下列约束限制:
(1)开发的系统本身定位为现有系统的补充和扩展,所以不能对原审核系统数据安全性造成影响,也不能影响原系统工作业务流程。同时,在数据库的设计和使用上必须保证与原系统编码的一致。
(2)必须充分利用税务系统软硬件资源及现有网络架构,避免增加新设备。
1.2数据分布模式选择
数据分布模式是指数据在地市税务局集中存放,市局退税机关和县区征收分局不设本地数据库服务器。数据分布模式的特点为:数据集中、无冗余,数据一致性好。便于管理和维护,系统维护成本低。网络扩展性强,数据安全性较好。业务监控能力最强。但同时对于市局服务器设备、网络设备、通讯线路的可靠性要求也比较高。
数据完全集中,所有查询及数据库访问操作均在市局主服务器上完成,服务器的运算负担重,数据丢失风险大。考虑到目前税务系统网络通讯建设已经比较完善,而出口退税数据量相对征收信息量还是比较小的,可以采取该模式来实施。
1.3总体架构
按照系统数据集中管理方式划分:出口退税管理系统采用总局、省局两级集中处理。
省局端系统:省局端系统主要承担出口退税业务处理,系统直接受理企业申报数据,办理出口退税业务,出口退税全部的业务数据集中在省级税务机关。
总局端系统:主要承担从全国的高度监控管理出口退税工作。其系统总体结构如图1所示。

在深入分析出口退税业务特点基础上,基于J2EE采用了7层架构:数据库层、持久层(DAO)、业务逻辑层、门户(Facade)层、代理(Delegate)层、WEB端控制层、页面展现层。同时在这7层架构之上,引入Apache Jakarta Struts的MVC模式,把视图一控制一模型进一步分离。软件架构如图2所示。
2 系统架构各层设计
2.1持久层设计
数据持久层的设计目标是为整个项目提供一个高层、统一、安全和并发的数据持久机制。完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。
系统具有业务复杂多变、数据量大、长事务处理、计算量大、多用户并发等特点,在设计和选择系统的持久层时,选择了JDBC Hibernate的持久层方案。
Hibernate是一种新的ORM映射工具,是JDBC的轻量级的对象封装。Hibernate在一定程度上解决了关系型数据库和对象之间的阻抗不匹配,使可以通过Hibernate基于数据库进行面向对象的设计和实现,从而更好地实现系统的可扩展性和稳定性。
Hibernate可以用在JDBC可以使用的任何场合,Hiber-nate不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。
Hibernate是一个和JDBC密切关联的、独立的对象持久层框架,可以搭配各种App Server、Web Server、EJB Con-Miner共同使用。Hibernate的兼容性仅同JDBC驱动、底层数据库产品间有一定的关系,和使用Java程序、App Server没有任何关系,也不存在兼容性问题。
下面根据系统的一些特点,设计了直接使用JDBC和使用Hibernate两种情况。
(1)直接使用JDBC(Procedure)。在目前的系统设计中,直接使用JDBC主要是的使用存储过程来实现业务逻辑。
存储过程由于是基于集合语言的,适合对集合数据进行处理。其优势在于:①在性能方面,由于可以充分使用数据库的优势,如可以使用服务器端游标等。同时存储过程可以不用重新编译,不用重新生成执行计划,所以存储过程适用在一些计算密集、长事务的处理场景中;②在部署和维护方面,任何存储过程的修改,不需重新编译部署前端应用程序,只需重新编译存储过程即可,所以存储过程在一定程度上也适合一些24小时运行的或业务逻辑复杂多变的系统上;③在网络传输方面,由于使用普通的SQL语句或其他操作数据库方式,均需将SQL语句传递至数据库,而存储过程只需传递存储过程所需的若干参数,可以减少由于多个业务环节而导致的应用程序和数据库之间的交互次数。
劣势在于:①在移植性方面,由于存储过程中不可避免地会采用当前数据库的一些特性,那么当系统切换到不同数据库时,无疑会带来很大的麻烦,这也是存储过程的一个先天的缺陷;②在数据库方面,如果过多的使用存储过程,会给数据库服务器带来很大的性能压力。
(2)使用Hibernate。Hibernate对数据库中的表、表间关系通过映射文件进行较好的映射,使得能够象处理对象一样操作表,而无需了解具体的数据库细节。Hibernate完成了记录至JAVA对象的映射,一种行数据处理的映射,通过Hibernate操作单条记录时会比较方便和快捷。此外,Hi-bernate在使用过程中,Hibernate会维护数据表间关系,需要维护表和对象的映射关系,这些Hibernate进行了缓存,成为一级缓存,而对动态POJO的缓存,称为二级缓存。
其优势在于:①在开发效率方面,如果在业务逻辑层,即在前端应用系统中实现业务逻辑,可以充分享受高级语言的集成开发环境带来的各种便利;同时可以使开发人员无需过多地关心数据库细节,从而可以有更多地精力投入在业务逻辑的实现上;②在设计分析方面,如果用面向对象的分析方法对业务逻辑层进行良好的设计,会使系统具有良好的可扩展性和可复用性;③在可扩展性方面,对于一些业务的变更,只需做很少的修改,如果是一些非关键字段、计算字段的增改等,甚至可以不需修改任何业务逻辑层的代码,就可实现修改。
劣势在于:在运行效率方面,由于通过Hibernate操作数据表记录,Hibernate需要将数据表记录映射成JAVA对象,建立缓存,在大数据量集合计算、处理时,没有太多性能上的优势。
2.2业务逻辑层
出口退税管理系统,几乎所有的业务逻辑运算都在E-JB端完成,并且系统具有数据量大,操作复杂,计算频繁等特点,所以业务逻辑层架构设计的好坏直接影响到整个系统的运行速度、可扩展性、可维护性、组件可重用性及开发效率等各项指标。
针对系统用户具有操作密集,交互密集,计算密集这三个特点,整个系统的架构充分考虑到这些特点,对系统架构的各个层次都进行了设计优化,主要体现在:
(1)设计模式和缓存机制的灵活运用。
(2)抛弃了重量级的实体EJB CMP和BMP,只采用 Session Bean来完成业务逻辑。目前的EJB规范中,依据EJB的应用场合和其本身的特性,共分为三种类型:实体Bean、会话Bean和消息驱动Bean。
2.3门户层
门户层位于代理层和业务逻辑层之间,主要作用是为了降低层间的通信和相互依赖关系,使某一层的修改或调整不会影响到其它层,系统在这两层之间采用统一接口的方式,门户层主要应用了Facade模式。
结构型模式Facade模式通过在子系统间提供一个Fa-eade类或接口来达到子系统间的松散藕合和低依赖。
有两种方式建立接口Facade层:一种是在代理层建立,另一种是在业务逻辑层建立。
2.4代理层
代理层位于WEB端控制层和EJB层之间,主要作用是把WEB端控制层和EJB层无缝整合在一起,完成业务逻辑并将数据展现给用户。
在系统中,WEB层和EJB层如何进行衔接是一个关键的问题,必须考虑到并行开发效率、系统运行效率、网络压力、系统耦合性等因素。因此,在本系统的软件架构设计上,在WEB层和EJB层之间引入了代理层。在系统中规定,代理层是WEB层和EJB层交互的唯一途径。代理层不但为WEB层隐藏了调用EJB的具体细节,而且为WEB层提供了统一的接口,并进行了J2EE服务器的上下文缓冲,使得系统在性能和开发效率上都得到提升。
2.5Web端控制层
在WEB端控制层引入了Apache的Struts框架。
由于出口退税系统界面较多,业务数据多样化,有时需要为同样的数据提供多个视图,使用JSP、Servlet进行控制比较复杂,所以采用MVC模式(Model-View-Controller,模型一视图一控制器),将视图、数据模型和控制从架构上进行分离,使得模块的职能更加清晰,这样对于开发和维护都比较方便,很好地实现了数据层与表示层的分离。
在MVC模式中,Model层实现系统中的业务逻辑,在系统中用JavaBean或EJB来实现,并通过代理层实现对业务层的代理;View层用于与用户的交互,通常主要用JSP来实现;Controller层是Model与View之间沟通的桥梁,可以分派用户的请求并选择恰当的视图以用于显示,同时也可以解释用户的输入并映射为模型层可执行的操作。
实现MVC模式的框架有很多种,在出口退税系统设计中采用了流行的Struts架构来实现。是由Apache软件组织提供的一套开发源代码的项目,其广泛的适应性和高度的扩展能力使其成为了目前Java的Web开发者所逐步认可的标准。
2.6缓存技术的使用
在设计中,充分估计了一些容易造成性能瓶颈的环节,从缓存机制上进行了性能优化。在数据读取,输入,输出等均有缓存机制。
特别对于交换密集型的操作,由于信息需要在客户端、WEB服务器、J2EE服务器、数据库服务器之间频繁传输,而这些数据往往在一定时间段内是不变化的,如:用户权限菜单的信息、用户可操作的企业列表、WEB服务器查找J2EE服务器的上下文环境,以及其他一些稳定的业务数据,都进行了缓存。
在考虑缓存机制时,也应充分考虑数据的变化性。被缓存的数据一旦被修改,系统立刻通知相关摸块更新缓存数据。这样不但提高了系统的性能,而且保证了用户操作的正确性。这样,在引入缓存机制之后,系统在频繁交互的重复数据环节上,性能得到了大幅度提高。
3 结束语
系统架构根据系统特点进行了合理的分层,抽象为七层,并对各层的职责分类,保证了系统的高性能、可扩展性、稳定性和模块、代码的高复用。在各层的技术实现上,采用了Hibernate、Struts、POI、依赖注入等技术框架和设计理念,保证了系统的技术前瞻性。