1. 序章

この記事では、ソフトウェア開発における階層化アーキテクチャについて説明します。 それが何であるか、そのコンポーネントの概要を示し、その特徴を概説します。 次に、メリットとデメリットについて説明し、それらが適切に使用できる状況の例を示します。

始める前に、まずソフトウェアアーキテクチャを定義しましょう。

2. 定義

ソフトウェアアーキテクチャとは、あらゆるソフトウェアシステムの基本構造を指し、システムを機能させ、正常に動作するあらゆる側面を組み込んでいます。 アーキテクチャという用語は通常、物理的な設計を指しますが、ソフトウェアシステムでは、コンポーネントの設計、コンポーネント間の関係、ユーザーの操作、およびシステムのユーザーのニーズが含まれます。

ほんの数例を挙げると、マイクロカーネル、マイクロサービスクライアントサーバーなど、いくつかの異なるソフトウェアアーキテクチャが存在します。 これらはそれぞれ構造が異なり、異なるコンテキストで使用されます。 ただし、この記事では、階層化されたアーキテクチャについてのみ説明します。

3. レイヤードアーキテクチャとは何ですか?

階層化アーキテクチャは、ソフトウェア開発で最も一般的で広く使用されているアーキテクチャフレームワークであると言われています。 これはn層アーキテクチャとも呼ばれ、は、ソフトウェアの単一ユニットとして一緒に機能するいくつかの個別の水平層で構成されるアーキテクチャパターンを記述します。 レイヤーは、コンポーネントまたはコードを論理的に分離したものです。

これらのフレームワークでは、関連する、または類似するコンポーネントは通常、同じレイヤーに配置されます。 ただし、各レイヤーは異なり、システム全体の異なる部分に寄与します。

3.1. 特徴

このフレームワークの主な特徴は、レイヤーがそのすぐ下のレイヤーにのみ接続されていることです。 前の図では、レイヤー1はレイヤー2にのみ接続され、レイヤー2はレイヤー3に接続され、レイヤー1はレイヤー2を介してのみレイヤー3に接続されます。

もう1つの特徴は、分離層の概念です。 これは、レイヤーを変更でき、変更が他のレイヤーに影響を与えないことを意味します。 つまり、変更は、変更された特定のレイヤーに分離されます。

関心の分離は、単一レイヤー上のモジュールが一緒に単一の機能を実行する方法を説明するもう1つの注目すべき機能です

4. 階層化アーキテクチャのコンポーネント

現在、レイヤードアーキテクチャのレイヤー数は特定の数に設定されておらず、通常は開発者またはソフトウェアアーキテクトに依存します。 このフレームワークには通常、ユーザーインタラクションレイヤー、処理用のレイヤー、およびデータ処理を処理するレイヤーが常に含まれることに注意してください。 これらはさらに次のように説明されます。

  • プレゼンテーション層–ソフトウェアシステムとのユーザーインタラクションを担当
  • アプリケーション/ビジネスレイヤー–機能要件の達成に関連する側面を処理します
  • ドメインレイヤー–アルゴリズムとプログラミングコンポーネントを担当
  • インフラストラクチャ/永続性/データベースレイヤー–データ、データベースの処理を担当

さらに、一部のアプリケーションでは、一部のレイヤーが組み合わされています。 たとえば、ビジネスレイヤーと永続レイヤーが1つのレイヤーに結合されているのが一般的です。 これは、これら2つのレイヤーの機能と責任が1つのレイヤーで発生するようにグループ化されていることを意味します。

5. 長所と短所

このソフトウェアパターンには、次のような利点と欠点があります。

利点

  • フレームワークはシンプルで、習得と実装が簡単です。
  • 各レイヤーの機能が他のレイヤーから分離されているため、依存関係が減少します。
  • コンポーネントが分離されているため、テストが簡単です。各コンポーネントを個別にテストできます。
  • コストのオーバーヘッドはかなり低いです。

短所

  • フレームワークの構造が成長を可能にしないため、スケーラビリティは困難です。
  • それらは維持するのが難しい場合があります。 単一のレイヤーの変更は、単一のユニットとして動作するため、システム全体に影響を与える可能性があります。
  • レイヤーはその上のレイヤーに依存してデータを受信するため、レイヤー間には相互依存関係があります。
  • 並列処理はできません。

6. 階層化アーキテクチャを使用する場合

シンプルで小さなアプリケーションを開発する場合は、最もシンプルなフレームワークであるため、階層化アーキテクチャを実装することをお勧めします。 ただし、一部の開発者は、保守が難しい可能性があるため、大規模なプロジェクトに適用する方がよいと考えています。

それにもかかわらず、フレームワークは、習得と実装が簡単であるため、迅速に構築する必要のあるアプリケーションに使用できます。 また、開発者がソフトウェアアーキテクチャに関する知識をあまり持っていない場合や、どちらを使用するかが決まっていない場合にも役立ちます。

このアーキテクチャの実際のアプリケーションのいくつかは、WebアプリケーションとOSIモデルにあります。 J2EEプログラミングモデルも階層化アーキテクチャを実装しています。

7. 結論

この記事では、階層化されたアーキテクチャを定義しました。 また、それらの特性と存在する基本的なコンポーネントについても説明しました。 メリットとデメリットを確認し、それらを使用するのが適切なシナリオについても詳しく説明しました。