Androidアーキテクチャコンポーネント(AAC)

投稿日:  更新日:

Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。

有効そうだけど、実態がよくわからないので、いろいろ調べて理解した内容をまとめました。

スポンサーリンク

ソフトウェアアーキテクチャ

アプリケーションは多機能になるほど、プログラムが複雑になります。

複雑になると、次のような問題点が発生します。

  • (1)不具合の発生確率が上がる
  • (2)テストが難しくなる
  • (3)メンテナンスが難しくなる
  • (4)拡張性(スケーラビリティ)が低くなる

さらに、複雑さがn倍になると、問題の度合いがnの累乗のように増えます。

問題の度合いが増大してしまう「複雑」は、プログラマにとって大きな課題です。

長年、プログラマや研究者たちは、この「複雑」の解決策を探求してきました。

探求の中から登場してきたのが「ソフトウェア アーキテクチャ パターン」です。抽象化と問題の分割によって、複雑さを整理する試みが行われました。

例えば、UI(User Interface)をもつアプリケーションでは、「UIとデータを分離する」という考えから生まれたMVCやMVVMなどがあります。

パターン構成
MVCModelデータの管理と処理(ビジネスロジック)
ViewUIの外観と構造を定義(UIの表示)(1)データを取り出して表示
Controller入力の取得(2)入力をModelへ伝達
MVCの概要
MVVMModelデータの管理と処理(ビジネスロジック)
View-Model状態の保持
入力の識別
(4)データを状態へ変換
(3)入力を処理へ変換
ViewUIの外観と構造を定義(UIの表示)
入力の取得
(1)状態を取り出して表示
(2)入力をView-Modelへ伝達
MVVMの概要
・どちらもUI(View、View-Model)とデータ(Model)を分離した形を取ります。
・Slaveは与えられた指示に従うだけで、Masterが誰かを知りません。
・Modelは他のブロックに依存しません。ですので、再利用が容易です。

※「ソフトウェアアーキテクチャ」という言葉は、意味の範囲が広いので、ここでは「ソフトウェアの構成」という分野に絞った話になっています。

スポンサーリンク

Androidアーキテクチャコンポーネント(AAC)

Androidアーキテクチャコンポーネントは、前述したMVCやMVVMといったパターンを取り入れたプログラミングを支援するコンポーネント(部品)の総称です。

次のようなコンポーネントが紹介されています。

コンポーネント概要役割
Lifecycle特定のクラスにライフサイクルを持たせる
(ライフサイクル対応コンポーネント作成)
UIを分離する
LiveDataデータの更新を通知
(データの更新をきっかけに関数を実行)
UIを分離する
ViewModelライフサイクルを超えたデータの引き継ぎUIを分離する
RoomSQLite テーブルデータを Java オブジェクトに変換データの永続性を確保

Lifecycleの概要

Lifecycleは特定のクラスにライフサイクルを持たせることができます。このようなクラスを「ライフサイクル対応コンポーネント」と呼びます。

ライフサイクル対応コンポーネントで処理を分離

ビジネスロジックをActivityのライフサイクル中に処理を置く必要はありません。代わりにラフサイクル対応コンポーネント中へ置くことができます。

これにより、Activityはアプリの制御を外部へ追い出して、画面の表示制御に専念します。

※詳細は「Lifecycleでライフサイクル対応コンポーネント作成」を参照

LiveDataの概要

LiveDataは、データの更新を通知する監視機が付いた箱です。

LiveDataの構成

Observerはvalueを監視していて、valueが更新されるとobserveによって登録されたonChange関数を実行(関数オブジェクトへ通知)します。

LiveDataが効果的な場面は、UI(User Interface)関連のデータの更新をきっかけにView(TextViewなどのWidget)の表示を更新する時です。

※詳細は「LiveDataでデータの更新を通知」を参照

ViewModelの概要

ViewMoldeはライフサイクルを超えて保持されるオブジェクトを作り、端末を回転させた場合などに発生する構成の変更の前後で、同じオブジェクトのインスタンスが取得できます。

つまり、ライフサイクルを超えたデータの引き継ぎが出来る仕組みです。

ViewModelの概要

このオブジェクト内にUI関連のデータを格納しておけば、構成の変更後のActivityへ引き継ぐことができます。

※詳細は「ViewModelでライフサイクルを超えたデータの引き継ぎ」を参照

スポンサーリンク

関連記事:

Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「Lifecycle」です。 Lifecycleについて、まとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「LiveData」です。 LiveDataについて、まとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「ViewModel」です。 ViewModelについて、まとめました。 ...
Androidの開発スピードが速過ぎます。個人で習得を進めている私には、追い付いて行けません。 これが会社などであれば、グループ内のメンバーで分担して習得し、後に共有、などといった対応が可能でしょう。組織の強みですね! 先日も、久しぶりにAndroid Studioで新規プロジェクトを作成したら、Jetpack Composeのプロジェクトになってました。「はて?、これはどうすれば良いのだ?」と、頭の中は疑問符だらけで、プログラミングが先へ進めませんでした。 Jetpackの存在は知りながら、“使わなくてもアプリは作れる”と、学習は後回していたからです。 プロジェクトのひな型にJetpack Composeが採用されたならば、今後はJetpackの利用が開発の主軸になっていくのでしょう。 遅れ馳せならが、Jetpackの重要性を知った次第です。 ここで本腰をいれて習得しないと、さらに後方へ置いて行かれそうです。 という訳で、Jetpackの学習を始めました。 今回はJetpackそのものについてまとめます。 ※環境:Android Studio Flamingo | 2022.2.1 ...
View BindingはViewシステムを用いている場合に、プログラムから子Viewの参照を容易にする仕組みです。 Googleは「利点がある」と述べています。しかし、私は利点に感じないので、積極的な利用をしていません。 今まで、単なるオプションと考えていたのですが、最近は一般的になりつつあり、世に出回っているサンプルで頻繁に見かけるようになりました。 ですので、ここに備忘録として、まとめます。 ※環境:Android Studio Ladybug | 2024.2.1     Kotlin 1.9.24      (Viewシステムのプロジェクトは1.9.24が選ばれる)      (Composeのプロジェクトは2.0.0が選ばれる) ...
Data BindingはViewシステムを用いている場合に、Viewの表示と状態(データ)を結合する仕組みです。 結合とは「状態の変化に連動して、表示を更新する」ことです。 Googleは「利点がある」と述べています。しかし、私は利点に感じないので、積極的な利用をしていません。 Googleが提供するAndroidアプリのサンプルで頻繁に登場し、よく見かけます。 ですので、ここに備忘録として、まとめます。 ※環境:Android Studio Ladybug Feature Drop | 2024.2.2     Kotlin 2.0.0      (Viewシステムのプロジェクトは1.9.24が選ばれる)      (Composeのプロジェクトは2.0.0が選ばれる) ...
スポンサーリンク