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 // 功能函數定義
謝謝觀賞:)