Open7
[意見募集] 設計・アーキテクチャを考えるスクラップ
クリーンアーキテクチャで目指すものはとにかく下記3点かなと思った
- 修正必要箇所の特定、かつその部分だけの修正が容易
- 特定モジュールに対象を絞ったテストが容易
- 作業分担が容易
そのためには、とにかくアプリケーションの設計において下記2つを守ることが大事かなと思った
- 全体の構成において: 中心から外側に向かって、モジュールの抽象度が上がっていくようにする
- モジュール同士の関係において: SOLID原則のLとD、つまり置換原則(「小」は「大」を兼ねる)と依存性逆転原則(抽象に依存させる)を意識すること
これらを守れば、層は4つなのかとかそういう議論は重要ではない
モジュール同士の関係を考えるにあたっては、とにかく「インターフェースに対してプログラミングする」というドグマが最重要である印象をうけた
特に外から内へ情報を逆流させる時に、とにかくインターフェースという抽象を通じてそれを実現するやり方にそれを感じた
GUIアーキテクチャとシステムアーキテクチャは区別しないといけないなと思った。
- GUIアーキテクチャ: viewとmodelをどう切り分けていくか、つまりユーザーから見える部分と見えない部分をどう分けてどう連携させるかを考えるもの。modelの中をどうするとか、viewの中をどうするとか、viewmodelの中をどうするかとかは考えない
- システムアーキテクチャ: modelの中の構造も含めて、システム全体をどう設計するか考えるもの
例えばクリーンアーキテクチャは明らかにシステムアーキテクチャなのであって、それはつまりMVCやMVVMとクリーンアーキテクチャが組み合わせて使われてもいいってこと。
その意味でMVCとクリーンアーキテクチャを同列に扱って、アーキテクチャの検討をするのは勿体ないのだと思う(どっちも同時実現できるのに二者択一みたいになってしまうので)
クリーンアーキテクチャにせよSOLID原則にせよ、実際にやってみると私のような初心者には面倒くさくて難しい
でも難しいことこそ原理や原則として定めて、それをある種の教条として必ず守るようにさせる意味があるんだろうな
すごく具体的な話にはなるけど、Pythonでクリーンアーキテクチャを取り入れようとするとインターフェースの代わりとして、ABC(Abstract Base Class)を取り入れるのは必須な気がした