系统架构设计师考试论文:论基于多层架构的系统设计

摘要

        随着城市化进程的加快,城市管理面临越来越多的挑战,为了更好的解决城市管理中出现的各类问题,营造良好的人居环境,提高城市综合竞争力,国家住建部近年来在全国大力推广网格化城市管理新模式。我所在的公司是一家专门从事网格化城市管理信息系统研发的软件企业,我作为公司的技术骨干参与了多地网格化城市管理信息系统的调研、设计和开发工作。网格化城市管理系统是综合利用GIS、数据库、计算机网络等技术以工作流程管理为核心的信息化系统,笔者将在本文论述基于多层架构的网格化城市管理信息系统的设计方法、开发中遇到的问题和解决方法以及对系统未来发展的展望。

正文

        由于城市化进程的加快,城市区域不断扩张,人口不断增长,日益增多的城市建设项目及人口流动带来了大量的城市管理问题,大到违法建设的拆除、市政设施的建设维护,小到流动摊贩和牛皮癣,城市各处都在不断发生着各种各样的问题,需要不同的城市管理职能部门及时发现处置。近年来全国数百个城市建设了网格化城市管理平台,通过平台的运行提升了问题的发现和处置效率,取得了良好的效果。

        基础的网格化城市管理系统从功能上分为无线数据采集子系统、受理子系统、协同工作子系统、监督指挥子系统、地理编码子系统、基础数据管理子系统、应用维护子系统、综合评价子系统、数据交换子系统9大子系统。其中无线数据采集子系统是安装在手机上的APP软件,信息采集员使用该软件对巡查过程中发现的城市管理问题拍照、GPS定位并填写大小类、问题描述等各项信息,通过无线网络实时上传至服务器形成城市管理案卷。案卷进入系统后,用户使用其他子系统提供的各项功能,完成案卷的派遣、处置、督查、核查并最终结案,系统对案卷从上报至服务器开始进行全流程全时段监控,根据案卷流转信息和人员办理信息实时对案卷计算各项考评指标,最终生成对人员、岗位、部门、区域的绩效评价报表。

        根据需求分析和各种体系结构的优缺点,我们最后决定采用B/S多层架构进行网格化城市管理系统的设计和开发。根据实际情况以及对未来电子政务的发展趋势预测,我们对传统的三层架构进行了调整,将网格化城市管理系统分为表现层、应用层、数据访问层、数据层4层。

        表现层、应用层、数据层是传统的三层架构的分层方式。我们通过调研发现,市场上各类电子政务系统在数据库的选择上目前主要有MS SQL Server和Oracle两类。MySQL作为开源免费的数据库在互联网领域已经牢牢占据市场占有率第一的宝座,随着中央不断推进互联网+战略以及简政放权路线,未来极有可能MySQL也会越来越多应用于电子政务领域以降低项目成本和开发难度。

        为了使系统能够支持MS SQL Server和Oracle数据库并在未来可以方便的扩展到更多数据库平台,我们在系统设计上增加了数据访问层,通过数据访问层屏蔽底层数据库平台的差异性,在更换数据库平台时,只需通过开发和配置对应的数据访问层,其他各层代码均无需修改,实现热插拔式平滑替换。下面详细介绍系统所选择的开发平台和各层的设计。

        为了实现跨平台,系统选择Java作为开发语言,使用Spring完成对象管理、依赖注入以及数据访问。系统分为表现层、应用层、数据访问层和数据层,表现层负责数据的展示及用户交互,应用层负责业务功能的实现和各模块组织划分,数据访问层负责对数据库进行读写和完成数据格式转换,数据层负责数据的存储备份。系统架构如下图所示:

        表示层基于ExtJS框架构建。当前RIA大行其道,B/S架构的系统前端在必须兼具美观的界面和良好的交互性的前提下,还需要考虑多浏览器兼容性以及对移动设备的支持,而使用JS技术构建前端界面可以很好的达到以上的需求。首先JS相比Flex、Silver Light等技术具有无需安装客户端插件的优势,使用JS实现的页面在浏览器打开即可直接呈现各类交互效果;其次JS与HTML5结合使用,可以实现跨平台的前端效果,无论是在PC端还是在Android、IOS、WP平台,都可以良好运行;最后由于开源运动蓬勃发展,目前有非常丰富的开源第三方JS开发库可用,能够帮助开发者快速完成交互、界面、网络、数据管理等各项基本开发工作。我司选择的ExtJS是业内主流的JS前端开发框架,ExtJS自带丰富的组件库,包括UI组件、数据组件、动画组件、网络访问组件等,同时提供了多套可直接使用的界面风格包,开发者可直接使用也可以扩展开发自定义界面风格。基于ExtJS构建的表示层使用Ajax与应用层进行数据交互,数据格式选择JSON,JSON是一种轻量级的数据交互格式,易于人阅读理解也易于机器解析和传输。

        应用层基于Struts2开发,Struts2使用拦截器的机制处理请求,可以帮助完成数据过滤、基本路由等基本功能,开发者可专注于业务逻辑的实现而无需过多关注底层技术细节如请求、响应等。应用层的开发中,重点在于类的组织和数据交互接口的良好定义。类的设计要遵循高内聚低耦合的原则,通过合理的组织使得类之间能够相互协作完成各项功能,同时类的组织也应该能映射出子系统的逻辑划分。数据交互接口的定义也很重要,由于应用层是连接表示层和数据访问层的纽带,因此必须定义好与其他层的交互接口,包括输入参数输出参数的个数、类型、格式等,在提供给表示层调用的接口设计上,输入输出参数的格式均使用JSON格式,这样主流的JS框架如ExtJS、JQuery等都可以直接读取解析,便于将来功能扩展或更换前端组件。

        数据访问层的目标是实现跨数据库平台。为了实现这一目标,我们首先根据应用层对数据的需要,抽象了一组数据访问接口,这组数据访问接口的输入输出参数类型均使用Java内置格式如List、Array等,这样对于应用层的开发者来说,无需了解数据库技术即可进行应用逻辑的开发。在设计好数据访问接口后,针对每种数据库平台,分别实现抽象数据访问接口开发配套的数据库访问对象,在数据库访问对象中处理不同数据库平台对数据类型、参数形式等差异性。应用层在与数据层交互时,面向接口编程而无需关注底层数据库平台细节。系统部署实施时,只需根据数据库平台配置对应的数据访问层即可。

        数据层支持Oracle和MS SQL,在设计数据库对象时,尽量使用SQL标准中的数据类型及DML和DDL语法,以此来尽量实现代码和对象复用,减少在迁移到不同数据库平台时需要的定制开发工作量,降低开发者的学习难度。

        系统开发中使用Spring来进行对象管理和依赖注入,提高了系统的稳定性和可配置性,避免Java开发经常遇到的内存泄露问题。系统使用了数据库连接池技术,实现了对数据库的高效利用,降低了资源开销提升了性能和可用性。

        本项目开发完成后,与以往项目比较,开发周期明细缩短,软件稳定性、扩展性和可维护性明显提高,用户在使用中对系统表示一致认可。通过本次开发实践,我认为多层架构的系统设计和开发能够有效提高软件质量和开发效率。
  

你可能感兴趣的:(考证,架构,系统架构,架构)