iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Software Development

從 Fragment 到 Compose — 老 Android App 重寫的架構取捨系列 第 5

網路邊界:後端信封與 `d: Any?` 的約束,`AppResult` 的誕生 | core:network |

  • 分享至 

  • xImage
  •  

先從"信封"兩字講起,

┌───────────────────────────┐
│ Backend Envelope │
│ │
│ code: 0 │
│ message: "success" │
│ │
│ data: ┌────────────────┐ │
│ │ Business Data │ │
│ │ UserDto │ │
│ └────────────────┘ │
└───────────────────────────┘

在 API 的回應處理,前端會先需要
1.知道此回應是否成功,或是得到了其他的狀態碼、訊息。這是信封表頭。
2.用來渲染畫面或其他用途的資料。這是被放在信封裡面。

但在公司專案,

Legacy A endpoint API
ApiEnvelope
└── d

Legacy B endpoint
ApiEnvelope
└── data

這樣兩套 wire-format variant, 我只要兩個 key 都接,或是動態根據 endpoint 解析指定的 key, 我也可以順利拿到信封裡面的資料(payload),不是嗎?

但繼續對上面這問題提問,會有以下要考慮的:

問題 如果答案是 Yes
ddata 都代表主要 response body? 可以 normalize
成功/失敗規則相同? 更適合共用 Envelope
兩者型態都由 endpoint 的 T 決定? 適合 ApiEnvelope<T>
有可能同時出現 ddata 必須定義規則
null 的意義是否相同? 必須確認 contract

這邊要聚焦的是:後端的不一致,要不要滲透進 App 內部?要的話要進到哪一層?

Backend JSON

│ d / data

Network DTO ← 知道:合理


Repository ← 最好不要知道


Domain ← 不應該知道


ViewModel / UI ← 更不應該知道


上一篇
Day 04|DI 取捨:從 ServiceLocator 與 17 分支的工廠到 Hilt
系列文
從 Fragment 到 Compose — 老 Android App 重寫的架構取捨5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言