软件设计中的可移植性的考虑

由于在下水平相当有限,不当之处还望大家不吝赐教。


参考Linux内核的思路,对应用程序的可移植性设计做出的思考。

Linux内核中,最前期的启动代码是特定体系结构的代码,还有中断、异常、系统调用的前期都会进入特定体系结构的框架代码,然后再转入体系结构无关的代码。

特定体系结构的代码,位于以体系结构名称命名的文件夹中。

那么对于应用程序的设计,如何借鉴呢?以GUI程序为例。

假如一个C语言写的应用程序,需要支持多种GUI环境(win32、QT、X window等)。那么这些不同的GUI环境中的应用程序,初始启动代码不同,然后运行起来以后各种交互事件的框架代码也不同。因此,可以考虑为不同的GUI环境建立一个以GUI环境名称命名的文件夹,将相关代码放进去。

如果应用比较简单,可以将环境无关的代码(纯业务逻辑,例如扫雷游戏的纯逻辑处理)放在名称为core的文件夹中。

环境相关代码,在调用环境无关的代码计算出结果后,更新GUI界面即可。Linux下用户通过系统调用获取当前时间的例子与此比较相似。


这样一来,构建出的应用程序,由GUI环境相关代码与环境无关代码两部分组成。


如果应用程序比较复杂,core里面还要调用一些外部接口,完成相应的操作,而这些操作如何实现又是与运行环境相关的。那怎么办呢?

内核中,也有类似的情况。例如,中断来了,先会有一些特定体系结构的框架代码被执行,然后进入中断处理的通用代码,然后最终找到相应的驱动程序的处理接口,调用驱动程序的接口。然而,驱动程序要做的事情,内核并不理解(不像扫雷游戏的逻辑处理,上层知道他做的是什么工作),同时驱动要做的事情如何实现还与环境有关。

此时,内核就对外提供一些接口,例如读写寄存器的接口等,从而让驱动无须关心环境相关问题,实现了驱动的可移植性。

那么,应用程序的设计中,同样可以借鉴这种做法。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值