999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用戶二次開發軟件的兼容性架構設計

2016-03-14 01:26:19魏禮俊
微型電腦應用 2016年4期
關鍵詞:二次開發用戶

魏禮俊

?

用戶二次開發軟件的兼容性架構設計

魏禮俊

針對企業生產實踐中經常遇到的、用戶在設備供應商提供的接口庫函數基礎上二次開發的軟件,因供應商接口庫函數版本升級帶來的軟件兼容性問題,以C、C++語言接口庫函數為例,分析可以采取的軟件措施及其利弊,提出優化的軟件架構設計方法,防患于未然,力圖使用戶二次開發軟件以最小的代碼修改量與維護復雜度,事半功倍,實現與供應商提供的系列軟件接口庫函數全兼容,從而達到設備效能得以最大發揮且穩定可靠運行的最終目的。

軟件兼容性;軟件接口;架構設計

0 引言

在企業生產實踐中,經常需在供應商提供的軟件接口庫基礎上進行二次開發,才能最大發揮相應設備的功能。對于同類款式的系列設備,有時供應商會對軟件接口庫進行版本升級,迫使在供應商前款軟件基礎上進行二次開發的用戶軟件也需作同步更新,否則無法繼續使用。用戶軟件在開發初始版本時該如何設計架構,便于應對后續可能發生的供應商軟件升級帶來的軟件兼容性問題,實現用戶軟件修訂時代碼改動量最少、維護最簡便,從而運行最可靠的最終目標,值得認真考慮。

1 問題描述

一般而言,供應商軟件接口庫升級不會沒有章法,除新增功能接口函數外,原有功能接口函數大都僅改變函數名稱(防止新舊庫文件同時存在時的同名問題可能引起用戶軟件無法編譯、運行)。即使有個別函數發生了重大改變,也可視其為新增功能接口函數。下面將以C、C++語言接口庫函數為例,以偽代碼形式介紹解決用戶二次開發軟件在兼容性方面需作的架構考慮。

2 解決方法

對于用戶二次開發軟件來說,能正確定位、使用接口庫中相應函數是第一要務。原有功能接口函數需重新定位、使用,而新增功能接口函數在二次開發的軟件代碼中需作全新封裝處理。

總體來看,有3種基本方法處理接口庫函數升級問題:使用預編譯項、使用配置文件或用戶界面選項、使用函數指針數組。前兩種方法比較直觀,都是使得程序按if-else選擇結構進行分支處理,但后續代碼維護量大;而使用函數指針數組的方法則比較含蓄,且后續代碼維護簡易。以下將逐一解析上述3種處理方法處理各版本接口函數的過程,比較利弊,最后給出較為優化的解決方法。

2.1 使用預編譯項

假設用戶二次開發軟件針對供應商接口庫某一接口函數的初始版本是:

RET_TYPE User_func_examp(……)

{

……

PARAM_A_TYPE parama;

API-_A_TYPE_func(parama);

……

}

供應商接口庫函數版本升級后,用戶軟件采用類似如下的預編譯項進行不同接口庫同一功能接口函數選擇:

RET_TYPE User_func_examp(……)

{

……

#ifdef VersionA

PARAM_A_TYPE parama;

API-_A_TYPE_func(parama);

#elif VersionB

PARAM_B_TYPE paramb;

API-_B_TYPE_func(paramb);

……

#else

PARAM_X_TYPE paramx;

API-_X_TYPE_func(paramx);

#endif

……

}

用戶軟件中所有用到的供應商接口庫接口函數都需作類似處理。處理完畢后,用戶還需在編譯器未編譯到上述代碼之前的合適位置顯式地定義當前所使用的版本,例如:#define VERSION_B;或者是在編譯器編譯選項中添加適當的編譯選項,如-D VERSION_B。編譯后,重新運行。

可以看出,不論是否有新增功能函數,各版本所有功能接口函數都能進行類似處理,但多個C、C++文件需逐一作同步更新,程序修改、維護都頗為繁瑣。

2.2 使用配置文件或用戶界面選項

同樣假設用戶二次開發軟件針對供應商接口庫某一接口函數的初始版本同上?,F在供應商接口庫函數版本升級后,用戶軟件可在某個文件路徑下放置配置文件config.txt,文件內容如下:

Version_Tye:

在該語句后可輸入如TYPE_A、TYPE_B、……、TYPE_X等版本信息,用戶軟件在讀入使用者填入的版本信息并判斷信息有效性后,轉入對應供應商接口庫函數運行分支。用戶軟件也可在用戶界面中進行版本信息讀取、處理、有效性判斷,同樣轉入對應供應商接口庫函數運行分支。例如:

RET_TYPE User_func_examp(……)

{

……

switch(Version_Type)

{

case TYPE_A:

PARAM_A_TYPE parama;

API-_A_TYPE_func(parama);

break;

case TYPE_B:

PARAM_B_TYPE paramb;

API-_B_TYPE_func(paramb);

break;

……

case TYPE_X:

PARAM_X_TYPE paramx;

API-_X_TYPE_func(paramx);

beak;

default:

出錯記錄;

break;

}

……

}

編譯后,重新運行。

如使用預編譯項類似,各版本所有功能接口函數都能進行這樣的case處理;但增加過多的case使得函數路徑增加,程序維護難度加大。

2.3 使用函數指針數組

同樣假設用戶二次開發軟件針對供應商接口庫某一接口函數的初始版本同上;在供應商接口庫函數版本升級后,該接口函數可能有如下兩種變化:

如果各版本僅改變了函數名稱,則可定義如下形式的接口函數跳轉表:

typedef RET_TYPE (*FP_Func[FUNC_NUM_MAX])(PARAM) = {API-_A_TYPE_func,

API-_B_TYPE_func,

……

API-_X_TYPE_func};

用戶二次開發軟件接口函數按如下方式使用該跳轉表:

RET_TYPE User_func_examp(……)

{

……

FP_Func fun_handle;

(*FP_Func[Version_Type])(PARAM);

……

}

上述示意代碼中的Version_Type可來自于配置文件或用戶界面選項。編譯后,重新運行。

如果各版本相互差異較大,如參數列表或返回參數類型已完全改變,則可以使用前述預編譯項、配置文件或用戶界面選項方法加以解決;或者按上述接口函數跳轉表思路進行全新的二次開發。

可以看出,對于各版本大部分功能接口函數來說,適用函數指針數組的方法,代碼維護量大為降低,僅需維護各個接口函數跳轉表。但對于每個用戶接口函數,都需要有類似User_func_examp的處理過程,因此,仍有必要繼續優化代碼架構。

3 優化解決方法

從使用者習慣來看,一般先選擇,正確設置某一類型參數后,即可以開始運行特定功能函數。為此,需要斟酌選用現有軟件方法加以合理使用。二次軟件開發可作如下優化處理過程:

對供應商提供的接口庫函數進行全面梳理,將版本雖不同,但接口函數的參數列表、返回參數中有某幾項類型對應相同的集中在一起視作某一類型函數。例如:若干個無參、返回參數類型相同的接口函數;若干個輸入參數、返回參數類型相同,無其余參數的接口函數;若干個輸出參數、返回參數類型相同,無其余參數的接口函數等;

單列出各版本相互差異較大的個別接口函數;

經過梳理后,對于可以歸并為某幾個類型的函數,分別用如下的二維函數指針數組進行定義:

typedef RET_TYPE (*FP_Fun2c[VERS_NUM_MAX][FUNC_NUM_MAX])(PARAM) =

{{TYPE_A, A_FUNC_NBR1},

{TYPE_A, A_FUNC_NBR2},

……

{TYPE_A, A_FUNC_NBRN},

{TYPE_B, B_FUNC_NBR1},

{TYPE_B, B_FUNC_NBR2},

……

{TYPE_B, B_FUNC_NBRN},

……

{TYPE_X, X_FUNC_NBR1},

{TYPE_X, X_FUNC_NBR2},

……

{TYPE_X, X_FUNC_NBRN}};

對應二維函數指針數組的接口函數跳轉表,可以采用與前述類似的處理過程:

RET_TYPE User_func_examp(……)

{

……

FP_Func2 fun_handle;

(*FP_Func2[Version_Type][Func_Number])(PARAM);

……

}

Version_Type、Func_Number來自用戶軟件界面或者配置文件。此時,Version_Type(枚舉值數目不超過VERS_NUM_MAX)、Func_Number(枚舉值數目不超過FUNC_NUM_MAX)可作如下枚舉定義:

Typedef enum

{

TYPE_A,

TYPE_B,

……

TYPE_X

} VERSION_TYPE_ENUM;

Typedef enum

{

FUNC_NBR1,

FUNC_NBR2,

……

FUNC_NBRN

} FUNC_NBR_ENUM;

而對于那些不能集中的個別接口函數,則仍然使用前述的預編譯項、配置文件或用戶界面選項方法加以解決;或者按上述接口函數跳轉表思路進行全新的二次開發。

而為了便于維護,所有的函數指針數組可以放在同一個.h頭文件中。如此處理后,有望從設計層面將版本升級帶來的修訂、維護成本大幅降低,即已有接口函數可以繼續運行,只需擴充新增類似功能的接口函數。

4 總結

良好的軟件架構設計將為后續軟件編碼、維護帶來極大便利,這是共識。但在實際工程中,這一點卻又經常被有意無意地忽視。現在忽視架構設計,僅僅停留在程序可以運行,代碼一蹴而就,那只會為將來事倍功半的程序維護買單,而且也不利于代碼質量的提高。本文試圖以管窺豹,探討一下用戶二次開發軟件架構優化設計帶來的程序簡潔、健壯、易維護性方面的好處,以期更好地服務于實際工程。

參考文獻:

[1] Prata S.著,云巔工作室 譯,C Primer Plus 中文版[第五版] [M],北京:人民郵電出版社,2005

[2] Stephen Prata著,孫建春、韋強譯,C++ Primer Plus 中文版[第五版],[M]北京:人民郵電出版社,2005

[3] 錢能著,C++ 程序設計教程[第二版][M],北京:清華大學出版社,2005

[4] 凌堅、隋成華,基于組件結構的軟件二次開發接口的設計與實現[J],計算機工程, 28(2),2002年2月

[5] 李江紅、韓正之,Matlab和C++接口中函數注冊的實現[J],計算機應用,2000年4月第20期

[6] 朱傳安、潘大夫,Matlab與C/C++混合編程接口及應用[J],微計算機信息(管控一體化),2010年第26卷第5-3期

Design of Compatible Framework in Software Further Development of Users

Wei Lijun

(SMEE, Shanghai 201203, China)

This paper aims at the software compatible problems caused by version upgrade of the interface library functions provided by the providers. It is often come up in the production practice when the users do the further development of their software on the basis of these interface library functions. While taking the application software interfaces written in C/C++ language as an example, this paper analyzes the software measures and their advantages and disadvantages. Then it puts forward the optimized framework design method, trying to nip in the bud to provide the user’s software further development with minimum modification of codes and least complication degree of maintenance. It realizes the comprehensive compatibility with the interface library functions of the serial software provided by the providers to obtain the final target of stable and reliable running of the equipments and their maximum efficiency.

Compatibility of Software; Software Interface; Framework Design

1007-757X(2016)04-0048-03

TP391.41

A

(2015.08.17)

魏禮俊(1976-),男,安徽省當涂縣,上海微電子裝備有限公司,分系統與整機軟件開發,工程師,工學碩士,研究方向:應用軟件開發、算法仿真分析、圖像處理算法編程等,上海,201203

猜你喜歡
二次開發用戶
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級編程的旋轉坐標系二次開發
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
Micaps3.2 版本二次開發入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
主站蜘蛛池模板: 亚洲综合激情另类专区| 欧美综合区自拍亚洲综合天堂| 欧美国产三级| 一级一级一片免费| 妇女自拍偷自拍亚洲精品| 天天操天天噜| 国产呦精品一区二区三区下载| 亚洲午夜福利在线| 亚洲码在线中文在线观看| 精品国产三级在线观看| 欧美成人午夜在线全部免费| 日韩高清一区 | 欧美日韩国产综合视频在线观看| 天天躁狠狠躁| 欧美人与牲动交a欧美精品| 久视频免费精品6| 国产高清不卡视频| 亚洲高清免费在线观看| 亚洲欧美日韩中文字幕在线一区| 日本欧美在线观看| 在线免费不卡视频| 国产小视频a在线观看| 国产小视频免费观看| 国产99视频免费精品是看6| 久久天天躁夜夜躁狠狠| 54pao国产成人免费视频| 新SSS无码手机在线观看| 九色视频一区| 午夜精品区| 污视频日本| 国产精品专区第1页| 日韩精品一区二区三区视频免费看| 露脸真实国语乱在线观看| 国产女人喷水视频| 久久久久人妻一区精品色奶水| 思思热精品在线8| 一级福利视频| 国产高潮流白浆视频| 亚洲精品国产自在现线最新| 国产主播一区二区三区| 鲁鲁鲁爽爽爽在线视频观看| 黄色福利在线| 99视频有精品视频免费观看| 国产区福利小视频在线观看尤物| 欧美在线观看不卡| 国产精品福利尤物youwu | 成人另类稀缺在线观看| 一级毛片不卡片免费观看| 欧美精品一二三区| 成人a免费α片在线视频网站| 久久夜夜视频| 亚洲三级a| 韩国自拍偷自拍亚洲精品| 四虎亚洲精品| 尤物成AV人片在线观看| 精品91视频| 亚洲人成网站日本片| 91精品国产综合久久香蕉922 | 国产超碰一区二区三区| 国产精品福利在线观看无码卡| 激情视频综合网| 19国产精品麻豆免费观看| 国产真实自在自线免费精品| 视频二区欧美| 国产精品视频a| 日韩精品无码不卡无码| 国产日韩欧美在线播放| 污污网站在线观看| 亚洲AV无码一区二区三区牲色| 99热最新网址| 高潮爽到爆的喷水女主播视频| 久久精品这里只有国产中文精品| 国产成人av大片在线播放| 午夜国产大片免费观看| 正在播放久久| 亚洲天堂网视频| 国产另类视频| 国产成人午夜福利免费无码r| 在线中文字幕日韩| 成人一区在线| 日韩毛片免费观看| 97视频在线观看免费视频|