AndroidでClean Architectureとは何なのか?
最初に
構造的によく構成されたアプリを作るにはどうすればいいですか?
どうすれば維持、補修が簡単にできるか?
googleがこれに対する解答を整理して公式文書に整理しています。
そしてこれをClean Architectureと呼びます。
きれいに作られた設計図と理解すればいいと思います。
今日はこのClean Architectureについて勉強した内容をまとめたいと思いました。
モバイルアプリユーザー環境の基本
インスタグラムを使っていると想像しながら、次の例を読んでみてください。
- 友達に写真を共有するために写真撮影を押した。 カメラアプリが実行され、ユーザーはインスタグラムを離れますが、使用環境はつながっています。
- 撮影した写真があまり良くないので、アルバムをタップしてギャラリーアプリを実行しました。
- インスタグラムに戻って写真を共有します。
このようにユーザーがアプリをしばらく離れる状況は非常にある状況です。
もしこの過程で電話が来たり通知が来たりすると、使用環境が中断されることもあります。
また、スマートフォンのリソースは制限されているので、OSが空間が必要だと判断すればアプリプロセスを終了することもあります。
しばらくアプリを離れたり、電話に出てきたりしたからといって、作業していた内容がなくなることを望むユーザーは誰もいないと思います。
このようにユーザーまたはオペレーティングシステムがアプリコンポーネントを除去できるため、アプリデータや状態をアプリコンポーネントに保存してはならないです。これがモバイルアプリユーザー環境の基本概念です。
どのように設計することがいいか?
私のような初心者開発者がよくするミスがあります。
ActivityとFragmentにコードをすべて打ち込むことです。このようにすれば、生命周期と関連した多くの問題が発生します。
UIベースのクラスには、UIおよびOSの相互作用を処理するロジックのみを含める必要があります。
メモリ不足などの理由でOSがクラスを除去できるので、ユーザーのアプリ使用のためにUIベースのクラスを軽く維持し、依存性を最小化した方がいいです。
その次、Modelをビューオブジェクトおよびアプリコンポーネントと独立させることです。
Modelは、ビューに表示されるデータで処理を担当するコンポーネントを意味します。
簡単に言えば、データと関連したものをUIと分けることです。このようにすることで、アプリはライフサイクルと関連した問題を避けることができます。
上記の2つの規則を守るために、役割をよく分配し、依存性を下げて、様々な問題から抜け出し、維持/補修が容易になるということがわかります。 この規則を守るアーキテクチャパターンの種類にはMVC、MVP、MVVMがありますが、アプリ開発だけでなく様々な分野で使われる概念です。
Googleが推奨するアーキテクチャ
Googleでは推奨するアーキテクチャの例を示し、すべての状況に最適化されたアーキテクチャパターンはなく、上記のルールをよく守っていれば方法を変える必要はないと説明しています。 以下の内容は一つの模範例程度と見ればいいと思います。
Discussion