跨平台应用系统设计策略

顾晨刚,王康弘

(1.北京超图,北京市海淀区学清路 8号 100096;2. 中国科学院地理科学与资源研究所,北京市朝阳区大屯路 100101)

论文来源:2009年中国地理信息产业论坛暨第二届教育论坛就业洽谈会论文集

摘要:跨平台应用系统的设计可大大提高系统的健壮性和可移植性,提高程序的可复用程度,对软件的推广及灵活部署具有重要意义,对应用软件行业的发展具有重大意义。跨平台应用系统的设计主要从操作系统、数据库、程序开发语言支持等几大方面考虑。本文基于北京超图公司共相式 GIS平台和应用平台的技术创新,总结了跨平台应用系统的设计策略方案。

关键词: 跨平台,GIS,共相

跨平台程序设计是指设计的应用软件核心类库可以在多种硬件平台、操作系统、数据库上运行的软件设计方法。平台包括硬件平台和软件平台。如果使用高级语言进行软件开发,对硬件平台的适应性通常是指针对字节序、字长的适应。对软件平台的适应性主要体现在对操作系统,数据库、浏览器、二次开发语言的支持。对操作系统编程模型和系统调用 OS API的适应性,操作系统对计算机设备以及系统对象都建立了抽象的可编程模型,并通过系统调用的方式提供给应用程序使用,跨平台设计的主要任务就是适应这些差异。对数据库的适应性主要要考虑跨数据库平台和遵守标准的角度出发,应该尽量采用 ANSI SQL,避免使用Oracle、微软以及其他数据库厂商的一些特性函数和非标准的 SQL 命令。对于主流浏览器的支持,必须为特定浏览器针对性的编写代码或者编写最具普遍性的功能代码而放弃大量的动态内容。

跨平台程序设计是应用服务提供厂商和程序员一直追求的设计方法。跨平台最明显的好处是只需要写一次代码,就可以支持多种平台,省去了移植的麻烦。它对开发也是有好处的,开发人员可以在自己最熟悉的平台下使用最熟悉的工具开发调试程序,有助于提高编程效率。通过多种编译器检测可以在编译期发现并纠正更多的错误。在一种平台下不容易发现的软件错误或缺陷,在另一种平台下可能经常发生,有利于发现并修正更多的 bug,提高系统的兼容性。

1.跨平台应用系统的设计分析

跨平台应用系统的设计本文主要从跨操作系统应用框架设计、跨数据库引擎设计、浏览器支持、二次开发语言支持等几大方面考虑。

1.1 跨操作系统的应用框架设计

目前主流计算机操作系统 Windows、Linux(RedFlag Linux, RedHat Linux, Suse Linux)、 Unix (SUN Solaris,IBM AIX,HP UX)的安全性能、应用范围和应用领域有着较大的差异性。在国内,Windows 系列广泛应用于客户端或工作站,Unix、Linux 则较少地应用于终端。开源操作系统在国内的应用日渐增多。从另一个角度来讲,同一机构允许不同部门不同层次用户使用不同的操作系统,既可提高办事效率,又可降低整个网络系统的安全风险。事实下,各大操作系统提供的功能其实大同小异,主要有进程管理、进程调度、进程间通信、文件管理、IO 输入输出、网络输入输出、线程同步控制等等。但是要开发跨平台的软件却极其困难,因为各大操作系统提供的 OS API 差别很大,在某些处理方式有较大出入。在操作系统的层面设计应用系统框架,要考虑能封装大部分种类的 OS API,提供统一的接口,并且这些接口调用都是标准的统一的,基于此框架开发上层的应用就会有很大的便利性和通用性。

跨操作系统的应用框架设计主要从以下几个方面入手:

1、容器类包括 ARRAY、HASHMAP、VECTOR 等基本容器,有内存池机制,可以使用多种方式的 iterator 遍历。

2、时间类包括 Time、Locale、TimeFormat 等,时间精确到毫秒,有日期和 LOCALE 处理,有时间格式化处理,线程安全。

3、IO 输入输出流分输入输出流设备和读写器的设计,输入输出设备即 InputStream 和OutputStream,读写器即Reader和 Writer。可对任何对象和设备进行 IO操作。

4、实现跨平台的网络类库,首先需要对不同操作系统的网络编程模型和接口进行分析,求同存异。对网络编程来说就是对 socket API 进行分析。Windows 和 Linux 等操作系统上的 socket API 接口都属于 Berkeley socket API 的衍生物,它们非常相似,这大大降低了跨平台设计的难度。但它们之间还是存在许多细节上的不同,例如需要的头文件不同;winsock 需要调用 WSAStartup 进行初始化;Windows 下的 select 函数第一个参数被忽略,而 Linux 下第一个参数必须计算出来;Windows下不支持 IPv6 的SSM 组播,而 Linux支持;不同平台下对于 AF_INET 和 AF_INET6 等常量定义的值是不同的,这些值不能用于文件存储或网络传输。这些细节差异必须在实现类库时进行合适的处理。另外要重点考虑网络级跨平台的难点负载均衡。

5、日志框架吸收 Log4j和 Log4cplus 的设计,使用不同 Appender 来输出日志,使用各种 LayoutPattern 类格式化输出。

6、服务器框架库,引入 Postfix 的进程调度机制,可大大提高系统的运行稳定性,同时简化运行的维护成本。同时服务器框架已封装了大部分基础的功能,如访问权限控制、协议处理等,所以开发应用或扩展将更加简单,也利于团队协同开发。

7、分层软件架构对跨平台程序设计来说也是很重要的。通过在底层类库里解决平台相关性,而底层类库向上提供服务的接口完全是平台无关的。基于这样的底层类库开发的上层应用程序很自然地拥有了同样的跨平台能力。

最后完成对各个接口的实现。当不同的操作系统的实现方法不一致时,使用预编译指令区分不同操作系统,分别给予不同的实现。

应用框架设计还要考虑到支持应用服务器软件、PocketPC 软件、游戏等应用软件的开发,使其具备跨平台和支持多个编译器及开发工具,以及支持小内存应用等。