Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。
有効そうだけど、実態がよくわからないので、いろいろ調べて理解した内容をまとめました。
ソフトウェアアーキテクチャ
アプリケーションは多機能になるほどプログラムが複雑になります。
複雑になると、(1)不具合の発生確率が上がる、(2)テストが難しくなる、(3)メンテナンスが難しくなる、など負の側面が増大してしまいます。さらに、複雑さがn倍になると負の側面はあたかもnの累乗のように増えます。
負の側面が増大してしまう「複雑」はプログラマにとって大きな課題です。
長年、プログラマや研究者たちは、この「複雑」の解決策を探求してきました。
探求の中から登場してきたのが「ソフトウェアアーキテクチャ」です。抽象化と問題の分割によって、複雑さを整理する試みが行われて来ました。
例えば、UI(User Interface)をもつアプリケーションでは、「UIを分離する」という考えから生まれたMVCやMVVMなどがあります。
名称 | 構成 | |
---|---|---|
MVC | Model | (3)データの管理と処理(ビジネスロジック) (1)データの変更をViewへ通知 |
View | (0)UIの外観と構造を定義 (1)Modelからデータを取り出して表示 ※Activity/Fragmentに当たる |
|
Controller | (2)ユーザからの入力をモデルへ伝達 | |
MVVM | Model | (5)データの管理と処理(ビジネスロジック) |
View | (0)UIの外観と構造を定義 (1)View-Modelからデータを取り出して表示 (2)ユーザからの入力をView-Modelへ伝達 ※Activity/Fragmentに当たる |
|
View-Model | (6)Viewの表示データとViewの状態を保持 (3)Viewが受け取った入力を適切に変換しModelへ伝達 (4)Modelから受け取ったデータを表示データに変換 (1)表示データの変更をViewへ通知 |
|
・どちらのアーキテクチャもUIを「View」というカテゴリに分離した形を取ります。 ・Slaveは与えられた指示に従うだけで、Masterが誰かを知りません。 |
※「ソフトウェアアーキテクチャ」という言葉は、意味の範囲が広いので、ここでは「アプリケーションの構成」という分野に絞った話になっています。
Androidアーキテクチャコンポーネント(AAC)
Androidアーキテクチャコンポーネントは、前述したMVCやMVVMといったソフトウェアアーキテクチャを取り入れたプログラミングを支援するコンポーネント(部品)の総称です。
次のようなコンポーネントが紹介されています。
コンポーネント | 概要 | 役割 |
---|---|---|
Lifecycle | 特定のクラスにライフサイクルを持たせる (ライフサイクル対応コンポーネント作成) | UIを分離する |
LiveData | データの更新を通知 (データの更新をきっかけに関数を実行) | UIを分離する |
ViewModel | ライフサイクルを超えたデータの引き継ぎ | UIを分離する |
Room | SQLite テーブルデータを Java オブジェクトに変換 | データの永続性を確保 |
※View:TextViewやImageViewなどのWidget UI:User Interface、ユーザと情報・要求をやりとりする窓口、AndroidのActivityとViewに相当 |
Lifecycleの概要
Lifecycleは特定のクラスにライフサイクルを持たせることができます。このようなクラスを「ライフサイクル対応コンポーネント」と呼びます。
ラフサイクル対応コンポーネントがあれば、Activityのライフサイクル中に処理を置く必要はありません。代わりにコンポーネントのライフサイクル中へ置くことができます。
これにより、Activityはアプリの制御を外部へ追い出して、画面の表示制御に専念します。
※詳細は「Lifecycleでライフサイクル対応コンポーネント作成」を参照
LiveDataの概要
LiveDataは、データの更新を通知する監視機が付いた箱です。
Observerはvalueを監視していて、valueが更新されるとobserveによって登録されたonChange関数を実行(関数オブジェクトへ通知)します。
LiveDataが効果的な場面は、UI(User Interface)関連のデータの更新をきっかけにView(TextViewなどのWidget)の表示を更新する時です。
※詳細は「LiveDataでデータの更新を通知」を参照
ViewModelの概要
ViewMoldeはライフサイクルを超えて保持されるオブジェクトを作り、端末を回転させた場合などに発生する構成の変更の前後で、同じオブジェクトのインスタンスが取得できます。
つまり、ライフサイクルを超えたデータの引き継ぎが出来る仕組みです。
このオブジェクト内にUI関連のデータを格納しておけば、構成の変更後のActivityへ引き継ぐことができます。
※詳細は「ViewModelでライフサイクルを超えたデータの引き継ぎ」を参照
関連記事: