見出し画像

ソリューションアーキテクチャーデザイン連載(10/13):レイヤードアーキテクチャーとは何ですか?

本記事は2023.06.09に投稿したクリエーションライン Tech blogからの転載です。

レイヤードアーキテクチャーとは、アプリケーションをいくつかの層に分割し、各層が特定の役割を持つようにするアーキテクチャースタイルです。

〇プレゼンテーション層(Presentation Layer)
ユーザーインタフェースの実現に関するレイヤーであり、Webブラウザやモバイルアプリなどのクライアントアプリケーションとのインタフェースを提供します。主な役割は、ユーザーからの入力を受け取り、必要なデータを表示することです。

〇アプリケーション層(Application Layer)
プレゼンテーション層とドメイン層の橋渡しを行うレイヤーであり、ユーザーインタフェースとデータストアの中間に位置します。主な役割は、データ処理、ビジネスルールの実行、エラーハンドリングなどです。アプリケーション層は、Presentation LayerとDomain Layerの間で情報をやりとりするためのAPIを提供します。

〇ドメイン層(Domain Layer)
ビジネスロジック層。ビジネスロジックを実装し、実行するためのレイヤーであり、アプリケーション層とデータアクセス層(インフラストラクチャー層)の中間に位置します。ドメイン層は、アプリケーション固有のルールや概念を表現し、これらのルールや概念に基づいてビジネスロジックを実装します。通常、アプリケーション層の要求によって実行され、結果を返還します。

〇インフラストラクチャー層(Infrastructure Layer)
データアクセス層。データストア、ネットワーク、セキュリティなど、物理的なインフラストラクチャーに関するレイヤーであり、アプリケーション層との間で情報をやりとりします。主な役割は、データの永続化、ネットワーク接続、セキュリティ管理などです。

  レイヤードアーキテクチャーのメリットは、次の通りです。

〇モジュール性
アプリケーションが複数の層に分割されているため、各層を独立して開発することができます。また、層間のインターフェースが明確に定義されているため、変更や拡張が容易になります。

〇可読性と保守性
アプリケーションが複数の層に分割されているため、コードがより明確で理解しやすくなります。また、各層が特定の役割を持っているため、保守性も高くなります。

〇スケーラビリティ
アプリケーションが複数の層に分割されているため、必要に応じて各層をスケールアウトすることができます。

〇柔軟性
各層が独立しているため、必要に応じて層を追加、変更、削除することができます。

一方、レイヤードアーキテクチャーは、次のようなデメリットがあります。

〇複雑性
アプリケーションが複数の層に分割されているため、設計と実装が複雑になります。

〇性能の問題
アプリケーションが複数の層に分割されているため、データの伝達や処理に時間がかかり、パフォーマンスが低下する可能性があります。

〇コスト(開発/iインフラ)
アプリケーションの複数の層には、それぞれ別々のリソースが必要になるため、開発コストやインフラコストが増加する可能性があります。

〇開発の複雑性
各層が独立しているため、開発者は各層の役割やインターフェースを理解する必要があり、設計や実装の複雑さが増します。

〇デプロイメントの複雑性
アプリケーションの複数の層をデプロイすることが必要であるため、デプロイメントの複雑さが増します。

レイヤードアーキテクチャーは、Webアプリケーション、モバイルアプリケーション、デスクトップアプリケーション、組み込みシステムなど、様々な種類のアプリケーション開発で使用されます。

レイヤードアーキテクチャーは、4層に分割することが一般的ですが、小規模なプロジェクトや単純なアプリケーションでは、3層アーキテクチャーが十分な場合があります。一方、大規模なプロジェクトや複雑なアプリケーションでは、4層や5層のアーキテクチャーが必要になることがあります。

レイヤードアーキテクチャーを3層に分割すると、次のようになります。

〇プレゼンテーション層 (Presentation Layer)
ユーザーとアプリケーションの間で情報の受け渡しを行う層です。Webアプリケーションの場合、HTML、CSS、JavaScriptなどを使用して、ユーザーがアプリケーションとやり取りするインターフェースを提供します。

〇アプリケーション層 (Application Layer)
ビジネスロジックを実装する層で、ユーザーの要求を受け取り、処理してデータベース層に渡します。また、外部のAPIとの通信もこの層で行います。

〇データベース層 (Database Layer)
データの保存や読み取りを行う層です。この層では、データベースサーバーやデータストレージなどを使用して、データの永続化を行います。

このように、3層に分割することで、各層の責任が明確になり、保守性や拡張性が向上します。また、アプリケーションの機能をより細かく分割することで、各層の再利用性が高まります。 レイヤードアーキテクチャーを5層に分割すると、次のようになります。

  • Presentation Layer(プレゼンテーション層)

  • Application Layer(アプリケーション層)

  • Domain Layer(ドメイン層)

  • Infrastructure Layer(インフラストラクチャー層)

  • Cross-cutting Layer(クロスカッティング層)

  • アプリケーション全体に影響を与える共通的な機能を提供する層で、ログ、例外処理、認証、キャッシングなどが含まれます。各レイヤーにまたがって影響を与える機能を担当します。

また、特定の要件に応じてレイヤーの分割を調整することもあります。たとえば、データベースが複数の種類のデータを扱う必要がある場合、データアクセス層をさらに分割することがあります。

レイヤードアーキテクチャーは、他のアーキテクチャースタイルと組み合わせて使用することができます。たとえば、マイクロサービスアーキテクチャーやイベント駆動型アーキテクチャーと組み合わせることができます。レイヤードアーキテクチャーの層は、それぞれが独自の役割を持っており、アプリケーションを明確に分割することができるため、複雑なシステムの開発においても広く使用されています。また、レイヤードアーキテクチャーは、開発者がアプリケーションの特定の部分に集中することができるため、開発効率を向上させることもできます。  

AUTHOR

Lee

モダンアーキテクチャー基盤のソリューションアーキテクトとして活動しています。

[著書]
・Amazon Cloudテクニカルガイド―EC2/S3からVPCまで徹底解析
・Amazon Elastic MapReduceテクニカルガイド ―クラウド型Hadoopで実現する大規模分散処理
・Cypherクエリー言語の事例で学ぶグラフデータベースNeo4j
・Neo4jを使うグラフ型データベース入門(共著)
・RDB技術者のためのNoSQLガイド(共著)

facebook
Twitter

この記事が気に入ったらサポートをしてみませんか?