软件在线升级设计方案及演变过程分析
系统分析员 庞绍伟
摘要:本文通过一个虚拟项目,以时间为序,描述了一个软件在线升级设计方案的演变过程,针对遇到的一些典型问题进行分析,提出了相应的解决方法,并对该方案的一些不足提出改进建议。
关键字:在线升级 自动升级 升级包 类工厂 Xml
一、 前言
目前,各种业务系统的应用软件,部署方式为B/S结构和C/S结构。B/S由于易于部署、维护,但完成一些复杂业务时性能较弱。C/S结构,通过在客户部署客户端,性能优于B/S结构,但随着客户的增多,各种客户端版本的不统一,造成服务器复杂度提高,性能下降。通过在线升级,可以降低新版本软件的部署费用,提高客户满意度。
二、 项目背景
假设某软件公司,有多个产品线,其中一个项目组负责其中一套应用软件,采用C/S结构设计,在全国各地拥有广泛的用户群。由于原有版本只带有简单的升级功能,需要制定完善的升级方案。如果该升级方案设计实现完美,可以推广到全公司各个产品使用。
三、 第一次设计方案
1、 接到项目任务后,需要对需求进行分析,确定设计思路
该项目需要完成在线升级的功能,部署时,就得采用客户端-服务器结构,可分别简称为升级工具、升级服务器。升级工具向升级服务器查询升级包,并完成升级包的下载。
升级工具,需要完成应用软件的升级,待升级的应用软件,简称为应用程序。为了降低应用程序与升级工具的耦合,升级工具设计为单独的可执行程序,通过应用程序调用执行。
此时,确定了定义:升级工具,升级服务器,应用程序,相互关系如下图所示:
2、进一步分析
升级工具,需要升级自己。升级工具已经加载的DLL,是不能升级的,这需要将升级工具的功能一分为二,简称为升级工具A、升级工具B。升级工具A完成升级工具B的升级,升级工具B完成升级工具A的升级。
升级工具两部分的功能,可分别描述为:升级工具A主要完成升级包的查询、下载;更新升级工具B;升级工具B主要完成升级应用程序、更新升级工具A。
此时,重新确定了定义:升级工具、升级服务器、升级工具A、升级工具B,相互关系如下图示:
四、 第二次设计方案
1、开发中遇到的问题
升级工具B,根据升级对象的特征,需要升级应用程序的文件、数据库结构、下载数据,每部分均通过独立模块完成。
由于不同升级包的升级项各不相同,如何协调不同升级包的处理模块,调用、显示界面统一,是需要解决的问题。
2、解决办法
升级包提供包含各个升级项的配置,由类工厂负责生成的各个升级项的实现类,由升级工具的调度模块统一调用。其结构如下图所示:
五、 第三次设计方案
1、内部测试时遇到的问题
由于应用程序的开发人员,与升级工具开发人员分工的不同,分别独立开发、测试自己职责范围内的开发任务。应用程序与升级工具之间的信息交换,如何能够标准化、规范化,如果能够在保持结构不变的情况下,扩展新的功能需求,需要解决。
应用程序是一个主干程序,同时可以外挂各种扩展性功能组件。这些扩展的功能组件,大多是为某些特定范围内的客户,或者某些指定客户定制的。当应用程序升级以后,这些扩展组件也需要升级才能正常使用,这样,就需要一个非常灵活的配置。
2、解决办法
应用程序与升级工具间,通过应用程序列表Xml配置文件,完成数据交换。应用程序每次启动时,将自己的信息写入Xml配置文件。各种扩展的功能模块、升级工具,每次启动时,也将自己的信息写入Xml配置文件。
同时,参照此设计,为了降低升级工具A与升级工具B的耦合,减少升级工具B对升级工具A的依赖,升级工具A下载完升级包,将已下载升级包的信息写入到已下载升级包Xml配置文件,启动升级工具。
升级工具B完成升级后,将新版本信息写入应用程序列表配置文件,可防止检测升级包出现失误。
调整后的结构,如下图所示:
六、 总结与展望
1、 当前设计方案总结
经过调整后的设计方案,由于是通过应用程序列表的Xml配置文件,实现应用程序和扩展组件的数据交换,此时,扩展组件可以任意扩展,升级工具均可通过Xml配置文件,向升级服务器查询、下载升级包。
由于每次下载的升级包数量各不相同,升级工具A与升级工具B通过已下载升级包的Xml配置文件,完成数据交换,灵活、规范。
升级工具B采用类工厂设计思路,动态生成各升级项的实现类,安装升级包界面统一、正式。
但是,此设计方案只能应用于同一产品及其扩展组件的升级,无法应用于同一台电脑内安装多种不同应用程序的情况。
2、 展望
针对公司产品线的多种产品,均可能安装到同一客户的电脑上。为了规范各个独立的应用程序,采用统一的在线升级界面,可采用以下的解决办法:
u 将升级工具开发成服务,各个不同应用程序均调用相同的升级工具。
u 将升级工具以可执行文件的形式,安装在单独的目录里面。应用程序列表的Xml配置放在某个公用的文件夹,如Application Data。
u 每个应用程序,带一份升级工具。