複雑な相互依存システムをより効果的に理解、設計、管理すること
様々な箇所・階層で考えられる
ドメイン駆動設計の基本。横でなく縦(機能、ドメイン)にまとめる
→ Clean Architecture等のレイヤードアーキテクチャでやらかすことが多いので注意
UI設計の基本原則。
プレゼンテーション(UI)や見た目は変化しやすく、ドメインや構造とはコードのライフサイクルが全く異なる点に着目
ソフトウェアアーキテクチャ ― ソフトウェア開発のためのパターン体系: https://www.amazon.co.jp/dp/4764902834
ここでアーキテクチャガイドのURLをチャットに投稿する
Googleが公開しているアプリアーキテクチャガイド( https://developer.android.com/topic/architecture?hl=ja )では「最も重要な原則は関心の分離です」とある。あらゆる処理を1つのクラスにまとめないようにすることを求めている
この考え方で1つ注意点がある。データをどう見るかという話。 たとえば3層アーキテクチャを考えると、画面、処理、データの3つに分かれるので、データ関連は1つのモジュールにまとめてしまおうとか、 あるいは信頼できる情報源(あるデータのオーナーが誰かという話)はデータ層にすべてまとめてしまおうとか。 前者の3層アーキテクチャでデータレイヤーを1つのモジュールに安易にまとめてしまうと、アプリ全体の設定とログインユーザーの情報とを 同じクラスで扱ってしまい、凝集度が低くなってしまう。 後者のデータの所有者・オーナーをすべて下位層のデータレイヤーにまとめてしまうという考えでは、画面上のリストが選択されている状態や ラベルに表示する文字列のような、画面なりそのViewModelが持つべき情報をデータ層にまとめてしまうことになり、やはり凝集度が下がってしまう。
関心の分離は、異なるトピック・コンテキスト・ドメインの要素を分離するという考え方だけでなく、 似たものは同じ場所にグルーピングするという、いわば「関心の集約」という言葉も暗に含んでいることを覚えておいてほしい
ユーザーインターフェースコードをその他のコードを分離する。アプリを作る人にとっては必須の知識。そうでなくても、たとえばJupyter notebookで計算処理とグラフ表示を別ブロックに分けること、ファームでも別モジュールとの接平面になるファイルと実際の処理とを別ファイルで実現すること
あらゆるデザインパターンや設計パターン、アーキテクチャパターンはこの関心の分離を何らかの方法で満たしている