本記事で得られること
『ちょうぜつソフトウェア設計入門』を元に
- クリーンアーキテクチャとは美味しいの?
- クリーンアーキテクチャ周りで使われる用語は何?
- PHPで書くとどうなるのか?
これらがわかります
クリーンアーキテクチャとはなんぞや
クリーンアーキテクチャの立ち位置
ソフトウェアを開発するのにあたってユーザー固有の問題が存在します
フレームワークでいいんじゃんって思うけど、それだけでは解決しない問題が起きたりしたりしなかったり
既製品(LaravelやReactと行ったフレームワーク)並のアーキテクチャをつくろうぜと思っていたけれど、それってそんな簡単にはできないよね〜
「じゃあ、指針(ルール)を設ければいいんじゃね〜」
そこで生まれたのがこの「クリーンアーキテクチャ」です
クリーンになるにはどうすればいいのか?
凝集度・依存・安定度。
この3要素の条件が揃ったものがクリーンの定義とされます。
凝集度
関係の強いもの同士がまとまっていること。あっちいったりこっち行ったりしない
依存
利用する・されるの関係箇所が可能な限り減っている。つながりが減っている
安定度
できるだけ変更頻度の高い箇所に依存しない。変えても、影響が少ない。
円グラフはどこから見れば良いのか?
円状のぐるぐるした上の図ですが、一瞬見た感じ矢印の向きが目に止まります。理解の仕方としては内側から外側に向かって見ていくのをおすすめします
1層目 ドメインモデル
本質なところです。
プログラミング言語の文法と標準ライブラリ以外には何も依存しないところといえます。
2層目 ユースケース
ここからは非本質なところです。ユーザーの要望で変化するところになります。
例えば、本屋さんの事例で考えてみると
仕入れ・販売というところがドメインモデル(1層目)になりますね。(本を営む上で超重要なところ)
では、ユースケース(2層目)はどこが該当するのか?
- 効率の良い仕入れ操作をする
- 売ったものを管理したりする
ここは本質ではないので、会社によって、要望が変わってくるはずです。改善の余地が必要である。不安定だけど、ドメインモデル以外への依存がないため、安定しやすい層になるといえます。
3層目 インターフェイスアダプター
これまでは関心ごとが現実世界なのに対し、3層目の関心は、実際に実行できるアプリケーションとして形にしないといけません。
入力から出力までの制御の流れを、技術的な概念コードで表現する層になります。
4層目 インフラストラクチャ
1~3層目だけでは、完全なアプリケーションにはなりません。実際の入出力の詳細や画面との繋ぎ込みといったところの技術問題が解決できていない状況です。
おそらくシステムエンジニアが一番ワクワクするところなのかなと思っています笑
それぞれ独立したモジュールが存在していて、
- データベース接続とのつながりのみ
- メール送信のみ
などの役割に振り分けています。不安定になりますが、外部への影響は少ない(モジュールが独立しているため)です。内側からの安定度に影響する成分はかなり抑えられています。
あれ、4層目だけで良くね?
実際に動くところに影響する部分は、インフラストラクチャの層である、4層目なんですよね〜
じゃあ、他は要らないやん。
と思うのですが、他の人が見た時にコードがぐちゃぐちゃになっていたらどうしますか?
結論、あかん!!
保守できないものになってしまいます。
だからこそ、秩序があるアーキテクチャを採用していきます。ぐちゃぐちゃになっていたらよくないですよね。
おわりに
クリーンアーキテクチャがどういうものなのかを見ていきました。
指針を定めて、業務に沿うアーキテクチャにすることで、保守性が高い設計が出来上がります。
難しいと思っていたクリーンアーキテクチャでしたが案外難しくないもんですね笑
コメント