邓源清+石智伟
摘要摘要:互联网售票模式受到追捧,发展迅速,传统的客运企业对建立互联网售票平台需求强烈。采用B/S结构模式,以.NET作为开发平台,分析了三层架构存在的不足, 结合MVC设计模式,探讨了四层架构模式。增加IBLL业务接口层和IDAL数据接口层,整合ExtJS、Spring.NET、Nhibernate技术框架,实现了基于四层架构的客运企业互联网售票网站后台管理系统,以满足客运企业售票需求。
关键词关键词:三层架构;MVC;四层架构;ExtJS; Spring.NET;Nhibernate
DOIDOI:10.11907/rjdk.171044
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2017)005009603
0引言
随着Internet的快速发展,航空、铁路已相继实现了网络售票,很大程度上缓解了购票难问题,传统的客运行业也急迫需要建立网络售票平台。本文以客运企业互联网售票平台为核心,搭建了一个简洁易操作的后台管理系统。
大多数Web系统开发都依赖非常成熟的J2EE平台[14]。微软的.NET Framework因其支持多种编程语言受到欢迎,通过创建一个跨语言的公共API集,.NET框架可实现跨语言继承、错误处理功能和调试功能等,大大提高了开发效率[56]。一些流行的技术框架常用于软件系统开发中,如基于脚本语言JavaScript开发的ExtJS框架,可快速开发出丰富的界面效果[7];专注于.Net 企业应用开发的Spring.NET框架, IoC(Inversion of Control,控制反转、反向控制)和AOP(Aspect Oriented Pogramming,面向切面编程)降低了类之间的耦合度,使程序更灵活、扩展性更好[89];基于.Net 的针对关系型数据库的对象持久化类库Nhibernate,从数据库底层来持久化 .Net 对象到关系型数据库,代码仅和对象关联,操作数据库时自动生成SQL语句,确保对象提交到正确的表和字段中,简化了程序开发流程,缩短了开发时间[1011]。
目前,Web系统开发普遍采用分层架构,三层架构是最流行的分层模式,即将整个系统架构划分为界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)[12]。不同于MVC(ModelViewController)设计模式,它把Model细分为BLL、DAL、Model,体现着分层的“低耦合高内聚”。这种分层模式在开发中虽然应用广泛,但对所有项目都一成不变地使用大三层架构也存在以下缺点:
(1)数据访问层及业务逻辑层存在不足。由于方法定义和执行代码处于同一页面,业务层在转达来自Web层的内容时还要处理内容,需要编写大量代码,执行到数据访问层时也是如此,不利于访问不同数据库,增加了开发工作量。
(2)典型的大三层架构不利于维护。分层不够详细,容易牵一发而动全身,一个模块的变动会影响到其它模块变动,系统升级或维护困难、成本增加。
在分析三层架构不足的基础上,根据Web发展现状,结合客运企业网站的特点及需求,本文提出了四层架构设计。
1系统架构设计
1.1MVC设计模式
MVC模式,即模型-视图-控制器,强调把复杂的 Web 应用系统分成模型、视图和控制器3个层次进行开发[13]。视图对应系统的界面,负责接收用户请求及显示后台处理结果;模型对应系统中的数据和业务逻辑处理;控制器对应系统中的输入输出控制、用户请求处理及数据同步显示。每个核心部件任务分配明确,各自处理,降低了处理数据和显示数据间的耦合性[14]。
对比三层架构,这种分层模式更像是一种基于页面分层的设计模式,三层架构则是基于业务逻辑来分层的一种架构体系。
1.2四层架构设计
售票网站后台管理系统将MVC设计模式与三层架构相结合,形成四层架构。在常用的大三层架构模式上,UI界面层采用MVC模式,舍弃MVC模式的Model,取View和Controller,或者说数据的处理、数据库的操作交由BLL和DAL完成,并在业务逻辑层中增加业务逻辑接口层IBLL,数据访问层中增加数据接口层IDAL,具體设计如图1所示。
自上而下,表现层处于客户端,即用户使用的PC,其它层均处于服务器端,用户访问系统时通过HTTP协议请求服务器资源。
表现层:采用ExtJS框架实现界面显示。
控制层:接收用户在界面层的各种请求并转达至下一层进行业务逻辑处理,并将最后的处理结果返至表现层。
业务逻辑层和数据访问层:业务逻辑层BLL通过实现IBLL接口所定义的方法处理系统各种业务逻辑,如退票处理、留言回复等;需调用数据库时,再通过工厂模式DALFactory创建类调用方法访问接口IDAL,再由数据访问层DAL实例化接口,实现对数据库的操作。数据访问层融入了Nhibernate框架,实现数据持久化,并将所有的组件部署于一种面向切面编程的spring.NET框架中,进行管理、维护、执行,spring.NET框架把离散的组件组装到一起,对后期的扩展及维护带来极大便利。
Model:各层之间数据交互的媒介。
2架构实现
2.1表现层实现
(1)界面整体布局设计。基于JavaScript的ExtJS框架在界面布局方面做得非常优秀,在Web后台管理系统开发中应用广泛。系统界面实现选择常用的border布局,将界面分为east、south、west、north、center五个部分,在其items中指定使用region参数为其子元素指定具体位置,其中,center 区域是必须使用的,center区域会自动填充其它区域的剩余空间。
(2)表单设计及验证。ExtJS对表单的设计也很实用,基本的校验方式如手机号码是否为空、字符、数字等,具有人性化的提示方式。
该表单使用平行布局,将layout属性设置为column,表单控件分为5列,在formpanel的items中指定,在每列中设置columnWidth,指定该列所占总宽度的百分比;然后在每列的items中输入控件,通过xtype来指定每个控件的类型;然后设置allowbank、xtype等配置项,方便完成数据检验。如果设置allowbank属性为false,那么鼠标移开该控件时边框就会显示红色,鼠标移至控件上时就会出现错误提示信息。这种提示方式用户更容易接受,提升了用户体验。
(3)数据提交方式。使用ExtJS框架实现系统表现层时,采用以下两种方式进行数据提交:①表单提交。
采用这种方式提交,不需要一一获取表单控件内容值,而是一次性将所有的值也就是整个表单的值一起提交给后台服务器,提升了响应速度;②Ajax技术提交。通过Ajax技术向服务器提交数据,将需提交的参数以name:value的格式放在params中,实现网页的异步更新。
2.2业务逻辑层实现
业务逻辑层是整个Web系统中的核心部分,位于控制器之下数据访问层之上。通常,控制器调用业务逻辑接口层,业务逻辑接口层中定义了删除、保存、更新等方法,业务逻辑层继承IBLL基类,并实现其中的方法,完成各项复杂业务的处理。互联网售票网站业务逻辑层主要实现退票业务处理、留言回复、统计分类以及报表生成等。
控制器与业务逻辑层之间的调用关系如图2所示。
另外,整合Spring.NET框架的作用主要体现在对业务逻辑层的管理以及对Nhibernete提供集成支持,通过loC容器把分散的各个组件组合到一起。控制器与业务逻辑接口层耦合,控制器接受Spring.NET loC容器的依赖注入,避免控制器主动通过new获得其需要的业务逻辑组件,使控制器与业务逻辑组件松耦合。业务逻辑组件依赖于DAL,由Spring.NET容器负责将DAL组件注入到业务逻辑组件中,实现业务逻辑组件与DAL组件间的松耦合。
本文系统中,Spring.NET使用DI负责管理和装配所有的Object,如DAL类、业务逻辑类、控制器类等。各层对象之间的依赖关系由Spring.NET的依赖注入实现,各层之间的依赖注入关系如图3所示。
Spring.NET采用setter方法注入,即在Controller控制器类中创建所需BLL对象,并为该对象添加setter/getter方法。创建Object实例的工作不再由调用者完成,而是由Spring.NET容器对各层的实现类进行统一管理,降低了各组件之间的耦合度,提升了代码的可重用性。
2.3数据访问层和数据持久层实现
数据访问层DAL负责与数据库交互,位于业务逻辑层之下。当BLL数据访问接口层IDAL时,通过工厂模式DALfactory创建類调用方法,再由DAL对IDAL中定义的方法进行实现,完成对数据库的操作。
业务逻辑层与数据访问层的调用关系如图4所示。
IDAL接口层引入Nhibernate对象/关系数据库映射工具,数据以对象的形式进行传递,无需关注底层数据库是SQL server还是oracle或其它类型数据库。完成Nhibernate配置、建立映射文件等工作后,再使用Spring.NET对NHibernate进行整合,通过配置文件设置HibernateTemplate使用的SessionFactory,就可使用函数find()、save()、delete()、saveOrUpdate()等来操作数据库了,这使得开发人员在Spring.NET中使用Nhibernete更加简单[15]。
在开发过程中还有一个界定:对于单表操作业务逻辑比较单一的情况,采用Nhibernate的操作函数来操作数据库;而在逻辑相对复杂、事务比较多时,则采用数据库的存储过程来解决。这样做的优点是当项目逻辑发生改变时,只需在数据库修改存储过程即可,不用更新代码逻辑。
3结语
本文以客运企业售票模式转型为入口,针对售票后台管理系统的开发,探讨了系统的层次架构,给出了系统详细架构设计并阐述了具体实现。
在系统架构的设计和实现中,详细的分层有利于代码重用以及后期维护,弥补了大三层架构的缺陷,可在其它类似项目中稍作修改使用,大大提高了开发效率。
系统采用B/S结构模式,使用时免安装,只需浏览器键入域名即可,减少了前期工作,目前广东省部分客运企业已采用该系统作为互联网售票网站后台管理系统。
该管理系统具有如下特点:
(1)实用。网站后台管理系统根据实际需要,将复杂的业务逻辑简单化、合理化。用户能方便地对各类信息进行录入、查询、编辑、统计与下载。系统对大量的数据进行有效管理并保证数据的准确性、一致性与完整性。
(2)高效。应用程序响应速度快,使用方便,业务及数据处理能力强。
(3)安全。将服务器托管在具有完善机房设施、高品质网络环境、丰富宽带资源的服务器托管中心,达到安全、可靠、稳定、高效运行的目的。另外,考虑系统数据的安全性,为防止系统核心业务数据的非法访问,当用户登录时,系统会自动检测用户角色,根据用户所在机构与职位职责的不同来设置不同的使用权限。
(4)界面友好、易操作。应用系统界面简洁,操作简便。例如树形操作结构、信息表格、数据验证失败后的提示效果等,用户反馈良好。
参考文献参考文献:
[1]张舒文.客运联网售票系统的设计与实现[D].成都:电子科技大学,2012.
[2]欧阳松寿.铁路客运售票模式的研究[D].北京:北京交通大学,2007.
[3]刘卓宇.省际长途客运网上售票系统的设计与实现[D].上海:复旦大学,2013.
[4]张绍林.基于JavaEE5体系的联网售票系统设计与实现 [D].天津:天津大学,2008.
[5] [美]Jerrfrey Richter.Microsoft.NET框架程序设计[M].修订版.李建忠,译.北京:清华大学出版社,2003:1018.
[6]李庆法.完全探索Microsoff.NET技术战略[M].北京:中国青年出版社,2001.
[7]鞠凤娟.EXT技术在Web界面设计与实现的应用研究[J].计算机与现代化,2008(11):102104.
[8]阳王东,周勇,李旎,等.利用Spring.NET构建动态的三层应用程序框架[J].计算机时代,2009(9):2023.
[9]胡启敏,薛锦云,钟林辉.基于Spring框架的轻量级 J2EE 架构与应用[J].计算机工程与应用,2008,44(5):115133.
[10]李文艺.Spring.Net &NHibernate框架研究与设计[J].网络与信息,2012(4):2728.
[11]张淑全.基于 Hibernate 数据层设计模式的研究与实现[D].大连:大连海事大学,2007.
[12]Y LI ,D CUI.Improvement and application of MVC design patterns [J].Computer Engineering,2005(9): 3536.
[13]丁聪颖.基于J2EE MVC 的WebGIS及其空间数据索引的研究 [D].上海:上海交通大学,2007.
[14]王进.B/S模式下的三层架构模式[J].软件导刊,2011(3):3031.
[15]吴小莉,袁小霞,段金蓉.基于spring框架技术剖析[J].中小企业管理与科技,2009(12):232233.
责任编辑(责任编辑:杜能钢)