Chuyển tới nội dung chính

Khái niệm cốt lõi

Dữ liệu tự đến với bạn​

Bạn không tự fetch dữ liệu. Một màn theo dõi (hoặc một presenter được đăng ký nhận (subscribe)), và SDK gọi hàm render của bạn với dữ liệu hiện tại, rồi gọi lại mỗi khi dữ liệu thay đổi. Sau một lượt mua, Shop, Header và màn Character đều nhận số dư mới từ chính lượt mua đó; bạn không cần gọi gì thêm.

Đừng giữ bản sao riêng
// ❌ WRONG — this copy goes stale as soon as the server changes it
private long coreDust;
private void Start() => coreDust = header.Current.Currencies[0].Amount;
// ✅ CORRECT — subscribe once and render every change
private async void OnEnable()
{
lifetime = new CancellationTokenSource();
var token = lifetime.Token;
var headerSub = await header.SubscribeAsync(Render);
if (token.IsCancellationRequested)
{
headerSub.Dispose(); // the page closed while subscribing
return;
}
subscription = headerSub;
}

View và snapshot​

Những gì bạn nhận được đều chỉ đọc:

  • screen contract trả về một view (ProjectVShopView và các view khác). View luôn giữ dữ liệu đã xác nhận gần nhất. IsLoading chỉ là true cho tới khi dữ liệu đầu tiên về, và LoadError giải thích lần tải đầu bị lỗi.
  • presenter trả về một snapshot (ProjectVHeaderSnapshot và các snapshot khác) gồm Status, dữ liệu, và Error khi có lỗi.

Current trả về bản mới nhất, dành cho code vẽ (render) bên ngoài callback.

Server quyết định​

Backend quyết định số dư, kho đồ, stamina (thể lực), cấp độ, chi phí nâng cấp, giới hạn của shop, trạng thái khoá nhiệm vụ, phần thưởng và sao. Hiện đúng những gì SDK đưa cho bạn. Các bản xem trước mà SDK cung cấp (xem trước EXP, xem trước vật rơi, đếm ngược stamina) chỉ để hiển thị; đừng bao giờ biến chúng thành giá trị của riêng bạn.

Một lần bấm, một request​

  • Mở một màn thường không gửi request nào; dữ liệu đã được tải sẵn.
  • Một command (lệnh) gửi một request, và kết quả của nó cập nhật mọi màn đang hiện dữ liệu bị thay đổi.
  • Bấm lại khi command đang chạy sẽ không gửi lần thứ hai.

Vì vậy: không refresh sau command, không refresh khi mở scene, không reload định kỳ.

Đăng xuất và đổi tài khoản​

Sau khi đăng xuất, xoá tài khoản hoặc đăng nhập bằng người khác, toàn bộ dữ liệu của tài khoản trước bị xoá. View và snapshot cũ không được điều khiển UI nữa; các màn sẽ nhận dữ liệu của tài khoản mới khi nó tải xong.

Vòng đời​

Screen contract và presenter sống cùng app. Observe hoặc SubscribeAsync của trang thì sống cùng trang: tạo khi trang mở, dispose (giải phóng) khi trang đóng.

Tiếp theo: Tích hợp scene.