inhouse_se
inhouse_se レイヤードアーキテクチャは、n層アーキテクチャとも呼ばれており、最も一般的なアーキテクチャのうちの一つだ。このアーキテクチャは**シンプル**さや**親やすさ**、**コストの低さ**からほとんどのアプリケーションのスタンダードの形となっている。

レイヤードアーキテクチャとは何か?(メリットデメリットの解説)

## レイヤードアーキテクチャとは何か?
**レイヤードアーキテクチャは、n層アーキテクチャとも呼ばれており、最も一般的なアーキテクチャのうちの一つだ。** このアーキテクチャは**シンプル**さや**親やすさ**、**コストの低さ**からほとんどのアプリケーションのスタンダードの形となっている。 また、このスタイルはいわゆるIT企業、IT企画室と呼ばれる組織が発想するにはとても自然なアーキテクチャである。 と言うのも、ほとんどの開発組織には、ユーザーインターフェースチーム、バックエンドチーム、データベースチームがいる。 **こうした組織構造は、伝統的なレイヤードアーキテクチャの各層にうまくフィットしている。**
## レイヤードアーキテクチャの構成
レイヤードアーキテクチャは論理的な水平方向のレイヤーとして構成され、各レイヤーは、アプリケーションないで特定の役割をこなしている。 存在しなければならないレイヤーの数や種類については特に決まっていはいないが、ほとんどのアプリケーションは次の4つから構成される - プレゼンテーション層 - ビジネス層 - 永続仮層 - データベース層 上記の4つが標準的なレイヤーとして構成されている。 小規模なアプリケーションでは3つになるかもしれないし、 大規模になると5つ以上にはなる。
## レイヤードアーキテクチャの基本構成要素
- プレゼンテーション層はユーザーインターフェースとバックエンドの通信ロジックに責任を置いている - ビジネス層はリクエストに関連した指定のビジネスルールの実行に責任がある - データベース層ではMySQLやSQLServerやPostgressなどのデータベースが入る 各レイヤーはそれぞれの仕事に**責任**を持っており、各レイヤーでの以上事態が起きた場合は各レイヤーの担当チームが責任を果たすべく修正を行う
## レイヤードアーキテクチャの種類
レイヤードアーキテクチャにおける「物理的な分離」はいくつも選択肢が存在する。 1. データベースのみを別のサーバーorコンポーネントに分離するケース 2. ビジネス層と永続層を一つのサーバーに入れ、プレゼンテーション層やデータベース層を別に分離させるケース 3. 全ての層を一つのサーバーに入れるケース 多くのオンプレミスな製品は、この3つ目のパターンで顧客へと納品されるはずだ。
## レイヤードアーキテクチャの開放レイヤーと閉鎖レイヤー
レイヤードアーキテクチャの層にはまた別の種類が存在する。 開放レイヤーと閉鎖レイヤーの二種類だ 通常、レイヤードアーキテクチャにおいては、「ある層へのアクセスはその前後の層のみに限定される」が、 開放レイヤーを用いる場合はその限りではない。 - 「ある層へのアクセスはその前後の層のみに限定される」閉鎖レイヤー - 「全ての層、あるいは一部の層であればアクセスできる」開放レイヤー この二種類がレイヤーを構築する種類となる。 開放レイヤーを使用する理由はさまざまである。 例えば次のようなユーティリティクラスは外部からのアクセスが妥当な場合が多い。 - 日付や文字列おユーティリティクラス - 監査クラス - ロギングのためのクラス これらを含む共有オブジェクトは、それぞれの層で独自に生成するよりは一つの層からアクセス可能な方が統制が取れやすい。 しかしながら、開放レイヤーのクラスが多数を占めた場合、技術による分離の難易度が上がるためなにを開放レイヤーに含めるかは議論の余地がある。
## レイヤードアーキテクチャのメリット:「関心ごとの分離」
レイヤードアーキテクチャでは「関心事の分離」に重点を置いている。 この「関心事の分離」では、アーキテクチャの中での効果的な役割と責任のモデルを構築することを容易にする。 - プレゼンテーション層はどのようにデータを取得しているかによらず処理ができる - ビジネス層は顧客データをどのような形式で画面に表示するかを判断する必要がない これにより、**開発者は特定の専門的な技術知識を活かして自分の領域に専念できるのだ** レイヤードアーキテクチャは**技術によって分断された**アーキテクチャだと言える。
### 安い
レイヤードアーキテクチャは誰しもが通る道であるため、シンプルさを保つことができる。 複雑なアプリケーションではアジリティや変更ができないため選択しづらいが、シンプルなアプリケーションであれば真っ先に候補に上がる。
## レイヤードアーキテクチャのデメリット
レイヤードアーキテクチャは**技術によって分断された**アーキテクチャだ。 ドメイン(事業)によって分割されたアーキテクチャではない。 したがって、**ある一つの事業的な変更が、アーキテクチャ全体に影響を及ぼしてしまう**と言うのがレイヤードアーキテクチャのデメリットだ。 例えば、顧客領域に変更が加えられる場合、 その変更は、プレゼンテーション層やビジネスルール層やサービス層やデータベース層に影響する。
### デプロイしづらい
レイヤードアーキテクチャでは、クラスファイルに3行追加しただけで全体の再デプロイが必要になる。
### モジュール性
また、ビジネス的な要件変更には、全てのレイヤーに変更が起きるため、モジュール性も低い。
### パフォーマンス(処理速度)
並列処理や、閉鎖レイヤーを必ず通過しなけれならないなどから、処理速度は低い。
## まとめ:レイヤードアーキテクチャを採用する理由
レイヤードアーキテクチャは、小規模でシンプルなアプリケーションやwebサイトに適している。 特に、**予算と時間に非常に厳しい制約がある中での出発点として優れた選択だ。** しかし、レイヤードアーキテクチャを使用したアプリケーションが**大きくなってくると、保守性やアジリティ、テスト用意性、デプロイ容易性といった特性に悪影響を及ぼす。**
## 備考
title:レイヤードアーキテクチャとは何か?(メリットデメリットの解説) description:レイヤードアーキテクチャは、n層アーキテクチャとも呼ばれており、最も一般的なアーキテクチャのうちの一つだ。このアーキテクチャは**シンプル**さや**親やすさ**、**コストの低さ**からほとんどのアプリケーションのスタンダードの形となっている。 category_script:page_name.startswith("2") img:https://github.com/kawadasatoshi/techblog/blob/main/0/inhouse_se/layerd1.png?raw=true