Sharing Mobile Application Code Across Platforms with Kotlin Multiplatform Mobile for GraphQL Queries

Bài tóm tắt Zillow 2023 3. Quy mô lớn Độ khó: Dễ

Zillow · 2023 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bối cảnh

  • App Premier Agent (cho môi giới) có bản iOS và Android viết riêng: code gần giống nhau viết hai lần, bug do hai bên khác nhau. Query GraphQL được viết lại ở cả hai nền tảng và đã gây bug (lộ ra khi viết UI test với mock server).

Thay đổi chính

  • Chọn Kotlin Multiplatform Mobile cho phần dùng chung, bắt đầu bằng query GraphQL và Apollo client; tách query thành module theo tính năng, schema ở module core; plugin Gradle riêng cấu hình Apollo cho từng module.
  • KMM nằm ở repo riêng, app tham chiếu như dependency bên ngoài. Dev publish bản tạm theo commit hash để thử trên nhánh app.
  • Vấp phải:
    • Sửa song song trên nhánh release và nhánh chính làm schema trong repo KMM lỗi thời khi merge; quy ước tránh làm song song trên cùng nội dung GraphQL.
    • Version theo commit hash không có thứ tự, hai dev ghi đè nhau không biết bản nào mới hơn; đổi sang tự tăng semantic version mỗi lần merge vào main.
    • iOS không gọi được code dùng chung nằm rải ở nhiều artifact; tạo một artifact "umbrella" gộp mọi module cho iOS, Android vẫn dùng từng artifact.
  • Kết quả: không còn bug do query lệch giữa hai nền tảng; bớt được hàng chục merge request đôi. Hướng tới chia sẻ thêm tầng domain, thận trọng với UI dùng chung (Compose Multiplatform còn thử nghiệm, rủi ro phụ thuộc Apple).

Vì sao

  • Chia sẻ phần ít phụ thuộc nền tảng nhất (tầng mạng/dữ liệu) trước, nơi lệch hai bên gây bug thật (Kiến trúc frontend).

Bài học cho SWE

  • Code dùng chung ở repo riêng cần quy tắc version có thứ tự, không thì không ai biết đang dùng bản nào.
  • Đi từng bước nhỏ khi chia sẻ code đa nền tảng; giữ lối lui.

Liên quan