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

Android 點贊/收藏功能架構:為何必須上傳伺服器、本地資料庫方案的致命缺陷

     編輯:程式設計綜合問答

核心結論

「不向伺服器上傳,相當於玩單機。」——最佳回答一針見血。

本地資料庫方案的三大致命缺陷

  1. 多裝置不同步:用戶換手機/平板登入,點贊/收藏紀錄消失。
  2. 資料不一致:App 更新重裝、清除快取、Root 手機刪除資料庫,本地狀態歸零,但伺服器端計數未變,造成顯示錯亂。
  3. 無法支援社交功能:熱門排行、好友動態、推薦演算法都需聚合全網互動資料,本地無法實現。

標準架構:Client ↔ API Server ↔ DB

// Client (Android)
interface LikeApi {
    @POST("posts/{id}/like")
    suspend fun toggleLike(@Path("id") Long postId): Result
}

// Server (Spring Boot 範例)
@PostMapping("posts/{id}/like")
public ResponseEntity toggleLike(@PathVariable Long id, @CurrentUser User user) {
    boolean liked = likeService.toggle(user.getId(), id);
    long count = likeService.count(id);
    return ResponseEntity.ok(new LikeResponse(liked, count));
}

// DB 表結構
CREATE TABLE post_likes (
    user_id BIGINT NOT NULL,
    post_id BIGINT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id, post_id)
);
CREATE INDEX idx_post_likes_post ON post_likes(post_id);

離線優先增強方案 (Optional)

  • 本地 Room 快取點贊狀態,UI 即時回應 (Optimistic UI)
  • 背景 WorkManager 同步至伺服器,衝突以伺服器為準
  • 斷網時佇列操作,恢復連線自動重試

安全性補充

  • API 需攜帶 JWT/OAuth Token 驗證身分
  • 防刷:同一用戶同一文章短時間內重複請求回傳 429
  • 防偽:簽名驗證或 reCAPTCHA
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved