fbpx

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

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

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

  • プレゼンテーション層(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(クロスカッティング層)
    アプリケーション全体に影響を与える共通的な機能を提供する層で、ログ、例外処理、認証、キャッシングなどが含まれます。各レイヤーにまたがって影響を与える機能を担当します。

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

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

 

前のページへ|Topページへ|次のページへ

Author

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

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

leeの記事一覧

新規CTA