首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

接口封裝邊界設計:薄適配層 vs 獨立 DTO,取決於業務擴展性與差異度

     編輯:程式設計綜合問答

對接多家第三方服務(A、B),參數結構各異,重合度約 50%。統一接口層該直接透傳 A/B 的 Bean,還是定義自己的 DTO 再轉換?

兩種模式對比

維度薄適配(直接用 A/B Bean)獨立 DTO(自定義統一模型)
開發速度快,少寫轉換代碼慢,需定義 DTO + 映射邏輯
耦合度高,上層感知第三方細節低,上層只依賴自有模型
擴展新服務 C需修改統一接口簽名只需新增 Mapper,接口不變
字段差異處理直接暴露差異,調用端需判斷在 Mapper 層屏蔽差異,補默認值
測試難度需 Mock 第三方具體類只需 Mock 統一 DTO

決策建議

  • 業務穩定、無新接入計劃、團隊小 → 薄適配,YAGNI 原則。
  • 持續接入新渠道、需單元測試、想屏蔽第三方變更 → 獨立 DTO + MapStruct/Dozer 自動映射。
  • 折中:核心共用字段定義統一 DTO,差異字段用 `Map` 或 `Extension` 字段攜帶,兼顧靈活與結構。

代碼骨架(獨立 DTO 模式)

public interface UnifiedService {
    Result process(UnifiedRequest req);
}

@Component
public class AdapterA implements UnifiedService {
    @Autowired AClient aClient;
    public Result process(UnifiedRequest req) {
        ARequest aReq = AMapper.toARequest(req); // MapStruct 生成
        AResponse aResp = aClient.call(aReq);
        return AMapper.toUnifiedResult(aResp);
    }
}

引入 MapStruct 後,映射代碼編譯期生成,無運行時反射開銷,維護成本極低。

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