Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Databaseのことを考えずにiOSアプリを作る ローカルデータベースを使うときの アーキテクチャ設計

Databaseのことを考えずにiOSアプリを作る ローカルデータベースを使うときの アーキテクチャ設計

ムッチョ

March 04, 2024
Tweet

More Decks by ムッチョ

Other Decks in Programming

Transcript

  1. データベースオブジェクトの扱いに付随するルール はたくさんある Realmの場合 1. threadを跨いでオブジェクトにアクセスするとクラッシュ 2. realm.write {} ブロックの外でrealmオブジェクトを編集するとクラッシュ 3.

    モデル定義にないプロパティへアクセスしようとするとクラッシュ 4. 削除済みのRealmオブジェクトにアクセスしようとするとクラッシュ 5. Realmインスタンスを適切にクローズしないとリソースのリークや不正な状態の参照でクラッシュ CoreDataの場合 1. Contextを異なるThread間で共有するとクラッシュ 2. フェッチリクエストが完了する前に結果セットにアクセスしようとするとクラッシュ 3. モデル定義にないエンティティにアクセスしようとするとクラッシュ 4. 削除されたか、コンテキストに属していないマネージドオブジェクトを操作するとクラッシュ 5. モデルの属性に対して予期しない型のデータを設定しようとするとクラッシュ 6. コンパイルされたモデルとコード内のモデルが一致しない場合クラッシュ
  2. データベースオブジェクトの扱いに付随するルール はたくさんある Realmの場合 1. threadを跨いでオブジェクトにアクセスするとクラッシュ 2. realm.write {} ブロックの外でrealmオブジェクトを編集するとクラッシュ 3.

    モデル定義にないプロパティへアクセスしようとするとクラッシュ 4. 削除済みのRealmオブジェクトにアクセスしようとするとクラッシュ 5. Realmインスタンスを適切にクローズしないとリソースのリークや不正な状態の参照でクラッシュ CoreDataの場合 1. Contextを異なるThread間で共有するとクラッシュ 2. フェッチリクエストが完了する前に結果セットにアクセスしようとするとクラッシュ 3. モデル定義にないエンティティにアクセスしようとするとクラッシュ 4. 削除されたか、コンテキストに属していないマネージドオブジェクトを操作するとクラッシュ 5. モデルの属性に対して予期しない型のデータを設定しようとするとクラッシュ 6. コンパイルされたモデルとコード内のモデルが一致しない場合クラッシュ ルールを守るのは 難しい・苦労する
  3. 今回紹介したアーキテクチャの メリット 1. 保守性・開発効率の向上! ルールから脱却!データベースのことを考えずに開発ができる! 2. 最高レベルのUIパフォーマンスを達成できる! データの更新は常にバックグラウンド。 データ量が膨大になるとローカルデータベースでも重くなりがちだが、いつでも超高速 3.

    テストも書きやすくなる+動作も高速! テストの実行がデータベースに依存しない 。パラレル実行なども簡単。 4. コード全体がデータベースに依存しない。 もしデータベースを変更するとしても書き直しが少ない。