基于架構(gòu)的軟件設(shè)計(jì)

基于架構(gòu)的軟件設(shè)計(jì)(Software Design Based on Software Architecture,簡稱 SBDA 或 ABSD)是一種以軟件架構(gòu)為核心驅(qū)動(dòng)力的系統(tǒng)化設(shè)計(jì)方法。強(qiáng)調(diào)在需求分析后立即聚焦架構(gòu)設(shè)計(jì),通過架構(gòu)決策指導(dǎo)后續(xù)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)。


一、SBDA 核心思想

graph LR
    A[業(yè)務(wù)需求] --> B[架構(gòu)設(shè)計(jì)]
    B --> C[組件拆分]
    C --> D[接口定義]
    D --> E[詳細(xì)實(shí)現(xiàn)]

核心理念

架構(gòu)是設(shè)計(jì)的骨架,而非事后的文檔
與傳統(tǒng)“先編碼后補(bǔ)架構(gòu)圖”相反,SBDA 要求:

  • 架構(gòu)設(shè)計(jì)先行于代碼
  • 架構(gòu)決策約束實(shí)現(xiàn)細(xì)節(jié)
  • 架構(gòu)持續(xù)演進(jìn)并驅(qū)動(dòng)迭代

二、SBDA 關(guān)鍵流程(6步法)

步驟 1:需求架構(gòu)化分解

  • 輸入:功能需求 + 質(zhì)量屬性(性能/安全/可擴(kuò)展性)
  • 動(dòng)作
    支付業(yè)務(wù)需求
        ├── 功能需求:在線支付、退款、對(duì)賬  
        └── 質(zhì)量需求: 
             │- 支付成功率 > 99.99%(可靠性)
             │- 峰值 TPS 10萬(性能)
             └── 數(shù)據(jù)加密傳輸(安全)
    
  • 輸出架構(gòu)關(guān)注點(diǎn)清單(Architecturally Significant Requirements, ASRs)

步驟 2:架構(gòu)模式選型

根據(jù)需求選擇匹配的架構(gòu)風(fēng)格:

質(zhì)量需求 適用架構(gòu)模式
高并發(fā) 事件驅(qū)動(dòng)架構(gòu) (EDA)
系統(tǒng)解耦 微服務(wù) + 消息隊(duì)列
實(shí)時(shí)數(shù)據(jù)處理 流式架構(gòu) (Kappa)
高可靠性 冗余集群 + 熔斷

?? 例:支付系統(tǒng) → 選擇 微服務(wù) + CQRS + 事件溯源

步驟 3:組件化拆分與接口設(shè)計(jì)

  • 組件劃分原則
    • 業(yè)務(wù)高內(nèi)聚(如 支付服務(wù)、風(fēng)控服務(wù)
    • 技術(shù)異構(gòu)性隔離(如 Python 機(jī)器學(xué)習(xí)服務(wù)Java 交易服務(wù)
  • 接口定義
    // 支付服務(wù)接口示例
    interface PaymentService {
        @POST("/pay") 
        Response<PaymentResult> pay(PaymentRequest request); // 支付接口
        
        @GET("/transactions/{id}")
        Response<Transaction> getTransaction(@Path("id") String id); // 查詢接口
    }
    

步驟 4:架構(gòu)決策文檔化(ADR)

Architecture Decision Record 記錄關(guān)鍵決策:

# ADR-001:選擇 gRPC 作為服務(wù)間通信協(xié)議

## 狀態(tài)
已批準(zhǔn)

## 背景
服務(wù)需跨語言通信(Java/Go),且要求低延遲

## 決策
- 使用 gRPC 替代 REST
- 原因:  
  ? Protocol Buffers 二進(jìn)制編碼效率高于 JSON  
  ? 支持雙向流式通信  
  ? 原生重試/超時(shí)機(jī)制

## 后果
- 需維護(hù) .proto 文件  
- 調(diào)試復(fù)雜度增加

步驟 5:架構(gòu)原型驗(yàn)證

通過 MVP 驗(yàn)證架構(gòu)可行性:

  1. 搭建核心鏈路(如支付創(chuàng)建 → 風(fēng)控 → 銀行通道)
  2. 壓力測(cè)試:驗(yàn)證 TPS 是否達(dá)標(biāo)
  3. 故障注入:模擬網(wǎng)絡(luò)分區(qū)驗(yàn)證熔斷機(jī)制

步驟 6:迭代演進(jìn)

  • 監(jiān)控生產(chǎn)環(huán)境指標(biāo)(延遲/錯(cuò)誤率)
  • 根據(jù)數(shù)據(jù)調(diào)整架構(gòu)(如拆分過大的服務(wù))
  • 技術(shù)債務(wù)看板管理架構(gòu)腐化

三、與傳統(tǒng)設(shè)計(jì)方法對(duì)比

維度 傳統(tǒng)設(shè)計(jì)方法 SBDA
設(shè)計(jì)起點(diǎn) 數(shù)據(jù)庫設(shè)計(jì)/界面原型 架構(gòu)決策
需求處理 功能需求優(yōu)先 質(zhì)量需求驅(qū)動(dòng)架構(gòu)
技術(shù)債務(wù) 后期重構(gòu)解決 早期架構(gòu)約束規(guī)避
演進(jìn)能力 推倒重來式改造 可持續(xù)迭代演進(jìn)

?? 本質(zhì)區(qū)別:SBDA 將架構(gòu)從“設(shè)計(jì)副產(chǎn)品”提升為“設(shè)計(jì)導(dǎo)航儀”


四、SBDA 四大收益

  1. 風(fēng)險(xiǎn)前置暴露
    性能瓶頸/擴(kuò)展性問題在原型階段暴露
  2. 團(tuán)隊(duì)協(xié)作錨點(diǎn)
    架構(gòu)圖成為產(chǎn)品/開發(fā)/測(cè)試的統(tǒng)一語言
  3. 成本可控
    避免因架構(gòu)缺陷導(dǎo)致的推翻重來
  4. 長期可維護(hù)性
    清晰的架構(gòu)邊界降低維護(hù)復(fù)雜度

五、實(shí)踐案例:電商系統(tǒng) SBDA 設(shè)計(jì)

                          +-----------------+
                          | API Gateway     |
                          | (路由/認(rèn)證/限流) |
                          +-------+---------+
                                  |
           +----------------------+----------------------+
           |                      |                      |
+----------v---------+   +--------v--------+   +---------v----------+
| Order Service      |   | Payment Service |   | Inventory Service  |
| - 創(chuàng)建訂單          |   | - 支付處理       |   | - 庫存扣減         |
| - 狀態(tài)查詢          |   | - 退款          |   +---------+----------+
+----------+---------+   +-----------------+              |
           |                                              |
+----------v---------+                          +---------v----------+
| Order DB           |                          | Inventory DB       |
| (分庫分表)          |                          | (Redis Cluster)    |
+--------------------+                          +--------------------+

架構(gòu)決策亮點(diǎn)

  • 網(wǎng)關(guān)層隔離前后端
  • 支付服務(wù)獨(dú)立部署(金融級(jí)隔離)
  • 訂單庫分庫分表應(yīng)對(duì)高并發(fā)
  • 庫存用 Redis 保證實(shí)時(shí)性

總結(jié):SBDA 的本質(zhì)

用架構(gòu)思維駕馭復(fù)雜性

  • 架構(gòu)是 設(shè)計(jì)決策的框架
  • 架構(gòu)是 質(zhì)量屬性的保證書
  • 架構(gòu)是 團(tuán)隊(duì)協(xié)作的契約

通過將架構(gòu)置于設(shè)計(jì)過程的核心位置,SBDA 使軟件系統(tǒng)在快速迭代中仍保持健壯性與可演進(jìn)性,是應(yīng)對(duì)現(xiàn)代復(fù)雜系統(tǒng)的利器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容