首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

演化架構與緊急設計(四):演化架構核心議題——架構邊界、技術政治、Build vs Buy、SOA 端點版本控制

     編輯:Java 相關知識

本期轉向架構層面,探討四大實戰議題:架構與設計的本質區別、企業級架構師的政治生存、Build vs Buy 決策框架、分布式系統端點類型控制策略。

一、架構 vs 設計:Martin Fowler 的經典定義

「架構是完成後很難更改的東西。所以這種東西應該盡可能越少越好。」

架構為基座,設計在上層

  • 架構:Web 框架選型、資料庫技術、部署拓撲、安全體系、核心中間件——變更成本極高,牽一髮動全身
  • 設計:類別結構、設計模式應用、演算法選擇、API 簽名——在架構約束內可輕微調整

識別陷阱:框架的「毒販模式」

框架誘導你繼承其基類(如 Struts `ActionForm`),導致領域模型耦合框架:

領域模型繼承 ActionForm

後果:想在 Swing 中復用 `ScheduleItem`?必須把整個 Struts 拖過去,或重寫模型。

解法:組合替代繼承——領域模型實現接口,框架適配器持有領域模型實例:

組合解耦框架

鐵律:讓框架認識你,不要你認識框架。領域模型零框架依賴,適配層吸收框架 API。

二、架構師的政治生存指南

  • 最高技術職位 = 最大替罪羊:失敗歸你,成功歸團隊
  • 溝通 > 技術:《Peopleware》真理:「總是存在人的問題」
  • 決策須可辯護:記錄決策理由(ADR),面對邏輯不通但政治可行的干擾時有據可查
  • 拒絕「技術傲慢」:不因個人偏好拒絕成熟方案,評估標準公開透明

三、Build vs Buy:戰略 vs 經費決策樹

Build vs Buy 決策流程圖

核心判斷:業務流程是戰略資產還是經費成本?

維度戰略流程(自建)經費流程(採購 COTS)
競爭優勢 核心差異化能力 標準化、無差異化
定制深度 深度定制、持續演進 配置為主、輕度擴展
廠商鎖定風險 可控 高(深度定制即鎖定)
典型例子 核心交易、風控建模、智能推薦 人資薪資、財務報表、郵件系統

決策三關鍵節點

  1. 戰略/經費分類:戰略 → Build;經費 → 進入節點 2
  2. 開箱即用度:COTS 能 80%+ 無定制滿足 → Buy;否則 → 節點 3
  3. 可擴展 vs 可定制:
    • 可擴展:定義良好的擴展點(API、事件、插件),升級不破壞 → 可 Buy
    • 可定制:改源碼、改配置檔、掛鉤子,升級痛苦 → 傾向 Build

案例:金融服務公司的招聘系統

招聘被視為戰略優勢(招最聰明的人、流程最嚴謹)。顧問建議自建 HR 系統,雖耗時長,但構建差異化平台。若買 COTS,競爭對手買同套系統 → 無差異。

四、SOA 端點類型控制:寬鬆類型與版本演進

分布式系統端點(兩系統通信門戶)的類型策略決定演進靈活度。

強類型陷阱:RPC + WSDL

RPC 模式強耦合

  • WSDL 定義參數類型、順序、結構 → 雙方強耦合
  • 單方變更參數需同步升級另一方,否則通信失效
  • 變通方案:`addOrder` → `addOrder2` → `addOrder3`... 端點爆炸、代碼重複

寬鬆類型方案:文檔驅動 + Factory/Strategy 解析

寬鬆類型端點

端點內部解析流程

核心機制

  1. 端點統一接收文檔(XML/JSON),不預設結構
  2. 文檔含 `version`/`type` 標識,或透過內容推斷
  3. Factory 根據標識實例化對應 Strategy 解析器
  4. Strategy 負責:驗證 → 反序列化 → 轉換為內部領域對象
  5. 業務邏輯僅見領域對象,零端點版本感知

收益

  • 單一端點支援多版本消費者,各按節奏升級
  • 職責分離:端點只管「收文檔、產領域對象」,不混雜業務邏輯
  • 可用 SOAP(文檔字面風格)或 REST 實現,REST 更自然
  • 演化架構精髓:奠定基礎,支援無摩擦、無損害的變革

工具現狀與建議

目前主流框架(Spring WS、CXF、WCF)對寬鬆類型端點支援有限,需自行實現 Factory/Strategy 層。但前期投入換取長期演進自由,ROI 極高。

下一期將聚焦:緊急設計實戰案例——指標驅動發現 Struts 代碼庫中的參數處理慣用模式,從結構重複識別到元程式重構全過程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved