mcpField
A
android-data-layer

android-data-layer

github.com/new-silvermoon開発992511 回インストール13 週間前に更新
リポジトリ

android-data-layer について

Repositoryを軸にしたAndroidのオフライン優先データ層を解説するスキルです。開発者がRoomのローカル保存、Retrofitのデータ取得、バックグラウンド同期を組み合わせる際に役立ちます。

主な機能

  1. 01Repositoryを単一の情報源にする設計
  2. 02Roomの永続化と監視可能なFlow
  3. 03Retrofitによるネットワーク取得
  4. 04キャッシュを先に返して再取得
  5. 05WorkManagerによるOutbox同期
  6. 06HiltでのRepositoryバインド

活用シーン

  1. 01オフライン優先データ層の設計
  2. 02更新中のキャッシュデータ提供
  3. 03ローカル変更の同期キューイング

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/new-silvermoon/awesome-android-agent-skills --skill android-data-layer

インストール後、Claude Code で/android-data-layerを入力して読み込まれたか確認します。

詳細

Android データレイヤーとオフラインファースト

手順

データレイヤーは複数のソースからのデータを調整します。

1. リポジトリパターン
  • 役割:信頼できる唯一の情報源(SSOT)です。
  • ロジック:リポジトリは、キャッシュデータを返すか、新しいデータを取得するかを判断します。
  • 実装:
    class NewsRepository @Inject constructor(
        private val newsDao: NewsDao,
        private val newsApi: NewsApi
    ) {
        // ローカル DB のデータを信頼できる唯一の情報源として公開します
        val newsStream: Flow<List<News>> = newsDao.getAllNews()
    
        // 同期処理
        suspend fun refreshNews() {
            val remoteNews = newsApi.fetchLatest()
            newsDao.insertAll(remoteNews)
        }
    }
    
2. ローカル永続化(Room)
  • 用途:プライマリーキャッシュとオフラインストレージです。
  • エンティティ:@Entity データクラスを定義します。
  • DAO:監視可能なデータを返すには、Flow<T> を使用します。
3. リモートデータ(Retrofit)
  • 用途:バックエンドからデータを取得します。
  • レスポンス:インターフェースでは suspend 関数を使用します。
  • エラー処理:ネットワーク呼び出しを try-catch ブロックまたは Result ラッパーで囲み、例外(インターネット接続なし、404 など)を適切に処理します。
4. 同期
  • 読み取り:「Stale-While-Revalidate」。ローカルデータをすぐに表示し、バックグラウンドで更新を開始します。
  • 書き込み:「Outbox パターン」(高度な手法)。ローカルの変更をすぐに保存して「未同期」とマークし、WorkManager を使用してサーバーに変更を送信します。
5. 依存性注入
  • Hilt モジュールでリポジトリのインターフェースと実装をバインドします。
    @Binds
    abstract fun bindNewsRepository(impl: OfflineFirstNewsRepository): NewsRepository
    

コメント