《架構整潔之道》iOS實踐

語言: CN / TW / HK

《架構整潔之道》iOS實踐

以一個購買子系統為例,分析該子系統各個模組的劃分、排列、通訊都遵守了哪些的設計原則。

模組概覽

該子系統分為以下兩個子模組

  • 支付核心流程模組
  • 支付業務初六模組

圖1-1 模組概覽圖

image-20210727202247104

以下將會從下列三個維度分析該設計的緣由。

  • 設計原則:SOLID

  • 元件聚合原則:REP、CCP、CRP

  • 元件依賴原則:ADP、SDP、SAP

支付核心流程模組

圖2-1 支付核心流程模組圖

image-20210727202020938

類和介面一覽表

類、介面 功能
PurchaseManager 購買流程管理類
PurchaseItemManager 購買專案管理類
PurchaseLogicProtocol 購買流程抽象介面
PurchaseItemLogicProtocol 購買專案抽象介面
PurchaseLogicImpl 購買流程的實現類
PurchaseLogicMocker 購買流程的Mock類
PurchaseItemLogicImpl 購買專案實現類
PurchaseItemLogicMocker 購買專案Mock類

PurchaseManagerPurchaseItemManager 是購買子系統的核心類,兩者存在一定的聯絡,但是兩者又有相對獨立的特性,所以把他們拆開來,這樣做符合了SRP,程式碼也更加的方便閱讀和維護。

PurchaseLogicProtocolPurchaseItemLogicProtocol 定義了這兩個介面是為了讓PurchaseManagerPurchaseItemManager 具有擴充套件性,Mock也是一個擴充套件的場景,在資源不足的情況下,我們可以定義不同的mock類用於模擬不同的業務場景。這樣做符合了OCPSIP,從元件的角度來看,這樣做也是符合SDP

支付業務處理模組

圖3-1 支付業務處理模組類圖

image-20210727205249308

圖3-2 支付業務處理模組資料流圖

image-20210727210412629

從圖 *圖3-2 支付業務處理模組資料流圖* 看到 HomePayDataManagerHomeDataManager 之間存在雙向的資料流動,所以這裡的模組設計中引入了一個介面HomePayDelegate,打破了HomePayDataManagerHomeDataManager 之間的迴圈依賴關係,這麼做符合了DIP,同時也符合了元件中的ADP