UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Architecture】Androidのアーキテクチャ

Androidアプリの開発をやったことがないが、Androidアーキテクチャについて調べてみた

developer.android.com

Android アプリも例に漏れずサイズが大きくなるにつれきちんと関心が分離されたアーキテクチャを定義することが重要になる

ドキュメントによると Android アプリは原則 UI をデータモデルで操作する方針で設計を行うとある

アプリの推奨アーキテクチャ

ドキュメントをそのまま引用すると、各アプリに少なくとも 2 つのレイヤが必要

  • 画面にアプリデータを表示する UI レイヤ
  • アプリのビジネス ロジックを含み、アプリデータを公開するデータレイヤ

さらにドメインレイヤというレイヤを追加することで、UI レイヤとデータレイヤの間のやり取りを簡素化でき、再利用できる

簡単に

  • UI レイヤ(またはプレゼンテーション レイヤ)の役割は、アプリデータを画面に表示すること
    次のようなステップを実行する必要がある
    1. アプリデータを使用し、UI が簡単にレンダリングできるデータに変換する
    2. UI がレンダリングできるデータを使用し、ユーザーに表示する UI 要素に変換する
    3. このような UI 要素の集合体からのユーザー入力イベントを使用し、必要に応じてその結果を UI データに反映させる
    4. ステップ 1~3 を必要な回数だけ繰り返す
  • データレイヤは、それぞれが 0 から多数のデータソースを含むことができるリポジトリで構成されている
    リポジトリ クラスは、次のタスクを行う  
    • アプリの他の部分にデータを公開する
    • データの変更を一元管理する
    • 複数のデータソース間の競合を解決する
    • アプリの他の部分からデータソースを抽象化する
    • ビジネス ロジックを格納する
  • ドメインレイヤは複雑なビジネス ロジック、または複数の ViewModel で再利用される単純なビジネス ロジックをカプセル化する
    通常、このレイヤのクラスを「ユースケース」または「インタラクタ」と呼ぶ

iOSのVIPERよりレイヤーが少ない印象だが実際これでうまくやれているのか?はわからないが、Androidアプリ作る時に参考にしようと思う