【アプリ開発】データレイヤにおけるリポジトリ層とデータソース層について

こんにちは。エキサイト株式会社でエンジニアをしている新卒の岡島と申します。 普段業務ではFlutterを用いたアプリ開発を行っています。 今回は、既存APIからリビルド後のAPIへの繋ぎ込みを行った際に、アーキテクチャの重要性を痛感したので、アーキテクチャについて勉強したことを共有していこうと思います。

アーキテクチャの重要性を感じた業務中のケース

アーキテクチャの理解が乏しかったため、リビルド後のAPIへの繋ぎ込みを以下のように行っていました。

繋ぎ込み前
繋ぎ込み後

しかし、コードレビュー時に以下のようにすると良いとの指摘を受けました。

このようにすることで、Repositoryはデータソースの向き先だけ変更するだけで済み、下記のようなメリットがありました。

  • ViewModelが参照するRepositoryの変更が不要
  • 移行後は既存APIのDataSourceを削除するだけで済む

要約すると影響範囲が少なくて済むということです。

今までアーキテクチャはなんとなく責務を分離できるためメンテナンスが容易である程度の理解でしたが、このことをきっかけにアーキテクチャへの理解が進みました。 そこで勉強したリポジトリ層とデータソース層についてAndroid Developersで紹介されているデータレイヤに基づいてまとめたいと思います。

Android アプリアーキテクチャにおけるデータレイヤ

ここではAndroid Developersのアプリアーキテクチャガイドで紹介されているデータレイヤについて紹介します。 データレイヤとはデータの取得、操作に関する層であります。

データレイヤにはアプリデータとビジネス ロジックが含まれています。ビジネス ロジックは、アプリデータの作成、保存、変更方法を決定する実際のビジネスルールで構成されており、アプリに価値を提供するものです。

データレイヤでこのように関心の分離を行うことで、複数画面での使用、アプリの各要素間での情報共有ができるほか、単体テスト用に UI の外部でビジネス ロジックを再現することも可能になります。

下記より引用 https://developer.android.com/topic/architecture/data-layer?hl=ja

リポジトリ層の役割

リポジトリ層や以下の役割を担います。

複数のデータソース(リモートAPI、ローカルDBなど)からデータを収集し、必要なビジネスロジックを実行する層がリポジトリ層です。リポジトリ層はデータソース層からデータを収集し、アプリケーションの他の部分に提供しますが、データの取得や保存そのものの操作はデータソース層が行います。

データソース層の役割

データソース層は実際のデータ取得や保存を担当する層であり、各データソース(リモートAPI、ローカルDBなど)ごとに個別に実装されます。この層の主な役割は、外部のデータリソースと直接やり取りを行い、必要なデータを取得したり保存したりすることです。

リポジトリ層との違いは、実際にデータの取得保存などの操作を行う点です。

まとめ

今回は業務中の事例からデータレイヤのリポジトリ層とデータソース層についてまとめました。一言にデータの取得といっても、データソース層からデータを取得するのか、実際にDBやAPIからデータを取得するのかといった違いがあり、リポジトリ層とデータソース層の役割を明確に理解することができました。