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

投稿日:  更新日:

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

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

スポンサーリンク

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

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

複雑になると、(1)不具合の発生確率が上がる、(2)テストが難しくなる、(3)メンテナンスが難しくなる、など負の側面が増大してしまいます。さらに、複雑さがn倍になると負の側面はあたかもnの累乗のように増えます。

負の側面が増大してしまう「複雑」はプログラマにとって大きな課題です。

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

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

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

名称構成
MVCModel(3)データの管理と処理(ビジネスロジック)
(1)データの変更をViewへ通知
View(0)UIの外観と構造を定義
(1)Modelからデータを取り出して表示
※Activity/Fragmentに当たる
Controller(2)ユーザからの入力をモデルへ伝達
MVCの概要
MVVMModel(5)データの管理と処理(ビジネスロジック)
View(0)UIの外観と構造を定義
(1)View-Modelからデータを取り出して表示
(2)ユーザからの入力をView-Modelへ伝達
※Activity/Fragmentに当たる
View-Model(6)Viewの表示データとViewの状態を保持
(3)Viewが受け取った入力を適切に変換しModelへ伝達
(4)Modelから受け取ったデータを表示データに変換
(1)表示データの変更をViewへ通知
MVVMの概要
・どちらのアーキテクチャもUIを「View」というカテゴリに分離した形を取ります。
・Slaveは与えられた指示に従うだけで、Masterが誰かを知りません。

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

スポンサーリンク

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

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

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

コンポーネント概要役割
Lifecycle特定のクラスにライフサイクルを持たせる
(ライフサイクル対応コンポーネント作成)
UIを分離する
LiveDataデータの更新を通知
(データの更新をきっかけに関数を実行)
UIを分離する
ViewModelライフサイクルを超えたデータの引き継ぎUIを分離する
RoomSQLite テーブルデータを Java オブジェクトに変換データの永続性を確保
※View:TextViewやImageViewなどのWidget
 UI:User Interface、ユーザと情報・要求をやりとりする窓口、AndroidのActivityとViewに相当

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 ...
スポンサーリンク