libssh2庫的接口設計模式

C語言的項目代碼的架構設計很少有書籍介紹到,今天來談論一下一個通用的軟件代碼架構模型。

項目工程中有include目錄和src目錄。src目錄中的所有文件最終會被生成一個so文件。在部署的時候將這個so文件和include目錄中的所有h文件一起發佈,這樣,當用戶程序包含了include目錄中的文件後,就能使用其中的API函數了。

接着,就以libssh2.h這個文件做說明。這個文件沒有包含任何一個與libssh2功能有關的文件,做到了簡潔。同時,諸如

typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION

用戶僅僅能使用LIBSSH2_SESSION類型的指針,而不能訪問其中的成員。

而struct _LIBSSH2_SESSION 結構的定義位於src目錄中的libssh2_priv.h文件中。因爲這個目錄中的文件沒有被髮布,所以用戶無法使用看不到結構的定義,就無法訪問具體成員。libssh2.h,libssh2_priv.h一起合作,很好的實現了細節隔離。

對於libssh2.h中的函數,比如libssh2_init(),它的實現位於global.c文件中,而這個文件包含了libssh2_priv.h文件。所以,有如下包含關係:

libssh2.h <--libssh2_priv.h<-- global.c

libssh2.h 中有很多接口函數,可以分類爲全局類的,會話類的等等。所以這些接口的實現分佈在文件global.c,session.c,hostkey.c等文件中。這些實現文件中,若需要其他功能,可以包含其他文件。

如下圖:

libssh2.h //用戶可用的接口聲明

^

|

libssh2_priv.h // 內部數據結構的定義

^               ^                 ^

|                |                  |

global.c    session.c    hostkey.c // 功能函數定義

 

謝謝觀賞:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章