《架構整潔之道》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