レイヤードアーキテクチャ
https://scrapbox.io/files/66909374566dc7001debbdee.png
概要
「ソフトウェアシステムを分割する方法にはあらゆる種類のものがあるが、経験と慣習を通じて業界が収束している共通見解はレイヤー化アーキテクチャである」
この本のサンプルアプリケーションでは、レイヤードアーキテクチャを採用している
レイヤードアーキテクチャは一言で定義するのは難しい。しかし、あえて定義するとしたら、次のような性質を持つ設計手法だということができると筆者は考えている。
アプリケーションを作る際に必要な各構成要素を、それぞれの責務が定義された論理的なグループにまとめる
それぞれのグループ間のやりとりの方法を定義し、そのルールを常に守る
ルール
『レイヤー間の通信は、必ずレイヤー内、ないしは隣接レイヤーだけ』
ルールを守ることで、コードの変更があった際に、影響範囲をレイヤー内に限定することができる
なぜレイヤードアーキテクチャを採用するか
レイヤードアーキテクチャは、コードの秩序を保ちやすい傾向にあり、そして設計手法の理解や実装への導入が比較的手軽なためである。
コードの秩序を保ちやすい
コードの秩序面については、各レイヤーに定義した責務ごとのコードを整理するため、関心の分離 という規則を守ったコードを残しやすくなるのがポイントである。 これにより、どこに何があるかを把握しやすくなる。結果的にアプリケーションのコードの保守しやすさに繋がる。
設計手法の理解や実装への導入が比較的手軽
従来使ってきた 疎結合 なコードベースを作る手法を組み合わせることで、最初のレイヤードアーキテクチャに従ったアプリケーションは比較的手軽に実装可能である 問題点
関心の分離を達成するために各レイヤー単位でモデルのデータ型を定義する必要が出てくる
...
このため、データの受け渡し時に似たような構造のデータをひらすら行き来するバケツリレーが発生したり、似たような処理をする関数が複数レイヤーに登場してしまう