1. 程式人生 > >SDK的開發和設計總結(整合文章)

SDK的開發和設計總結(整合文章)

一、關於SDK的解釋

SDK是Software Development Kit的縮寫,譯為”軟體開發工具包”,通常是為輔助開發某類軟體而編寫的特定軟體包,框架集合等,SDK一般包含相關文件,範例和工具.

SDK可以分為系統SDK和應用SDK.所謂的系統SDK是為特定的軟體包,軟體框架,硬體平臺,作業系統等應用時所使用的開發工具集合.而應用SDK則是基於系統SDK開發的獨立於具體業務而具有特定功能的集合.

比如在進行Android 應用開發時,我們使用Google提供的系統SDK(Android SDK),而我們經常使用的友盟SDK、極光SDK則是基於系統SDK開發的.

明確SDK的概念之後,再來聊一聊這三個概念:Library,API,Framework

什麼是Library

Library即我們所說的庫,通常是一組或者幾組類的集合,通常是應用中某些功能的具體實現或者對系統已有功能的增強或補充。對Android開發者而言,最常見的莫過於是Support Library,另外就是我們經常使用各種網路請求庫(OkHttp,Volley),資料庫操作,圖片載入庫(Glide,ImageLoader)等.

什麼是Framework

Framework即我們所說的框架,通常是系統或者應用的骨架,很多時候,它表現為一組抽象的構建及構件例項間互動的方法.因此,可以認為,Framework規定了應用的體系結構,闡明瞭整體設計,寫作構件之間的依賴關係以及控制流程。注意此處的Framework並不完全等同於你所熟知的Android Framework框架,可以認為Android Framework中體現了Framework的思想,並進行了實現。

什麼是API

API是Application Programming Interface,又稱為應用程式設計介面,是軟體系統不同組成部分銜接的約定。更加通俗的說就API就是我們常見和編寫的方法或函式.
 

 

 

 

二、SDK設計

模組化開發

根據單一職責將系統拆分為不同的小模組,每個模組保持相對獨立。

模組之間通過協議或介面通訊,以減少相互之間的依賴耦合.模組內部按照設計的幾大原則進行實現,以保證模組本身可以靈活實現對於現代開發而言,模組化是常用的手段,從巨集觀角度來看,模組是系統最小的組成單元.

元件化開發

元件是對邏輯的封裝,並具備單個可移植性.比如可以把日誌記錄做成一個元件,之後它可以被輕鬆在應用在不同的專案中。對於android 開發者而言,Android 提供的每個UI 控制元件同樣也是元件,比如Button,TextView等。

所謂的元件化就是將整個專案劃分成多個模組,幾個模組或者單個模組作為一個元件,開發過程中我們可以對每個元件進行並行開發,最後釋出時通過依賴將元件合併成完整的應用。

SDK整體框架劃分,最好分為四層

API功能介面層

該層是對外提供介面,面向遊戲開發者的,提供SDK的功能介面,如常見的初始化、登入、支付、繫結、訂閱、資料上報、顯示浮窗、隱藏浮窗、退出等。這裡的介面設計需要注意的地方就是,對外的介面一旦對外提供,就儘量不要修改,且該層的程式碼不要混淆處理,所以在該層的程式碼不要做邏輯實現,避免被篡改。

業務邏輯層

該層是SDK對接API層的,是不同project專案的實現層,在這裡通過project配置檔案來配置不同的專案。API層持有Project的引用,通過配置,選擇不同的專案project實現。多個專案時,每個專案都有不同的業務邏輯,不同的功能實現,對應的API介面是不變的,這時就可以通過配置來切換不同的Project,在不改變介面的情況實現換SDK包的功能。

功能邏輯層

該層是SDK的功能實現層,是SDK的核心層,對接Project層的,為不同的Project專案提供功能介面。這裡採用元件化的思想,細分為各個功能元件,每個元件之間是相互獨立的,方便後續業務量大之後將元件抽離處理,單獨做成一個獨立的專案。如登入SDK、支付SDK等。

注意:這裡的功能不做任何的業務邏輯,只做功能實現,業務邏輯放到project層處理,通常與服務的互動也會在這層處理。

基礎庫

該層是整個SDK的基礎,封裝通用的基礎功能,網路庫、資料解析、日誌輸出、IO流、檔案加解密等。這裡的基礎庫,會封裝一些流行的框架,需要注意的是,流行的框架幾年會有被淘汰的風險,所以儘量做封裝處理,不然替換一個框架,上層的SDK都需要修改。
PS:基礎庫的話,建議分為業務基礎庫和框架基礎庫、UI基礎庫,方便後續的隔離和替換。避免後續基礎庫越來越臃腫。而且基礎庫不要輕易修改,不要輕易修改。切記!

 

總結:

Sdk架構設計儘量滿足模組化、元件化。開發時,從抽離、獨立各個業務層做起,儘量分清層次,來提高專案層次感,避免程式碼臃腫,提高程式碼閱讀性以及單元測試,降低維護難度。