ホームページ >バックエンド開発 >PHPチュートリアル >ヘキサゴナル アーキテクチャの発見: 堅牢でスケーラブルなコードを実現

ヘキサゴナル アーキテクチャの発見: 堅牢でスケーラブルなコードを実現

DDD
DDDオリジナル
2024-09-13 06:34:12853ブラウズ

ソフトウェア開発では、コードの拡張性、保守性、テスト容易性の問題を解決しようとすることがよくあります。ここで、「ポートとアダプター」とも呼ばれるヘキサゴナル アーキテクチャが登場します。

Alistair Cockburn によって開発されたこのアプローチのアイデアは、ビジネス ドメイン (アプリケーションの中心部) がシステムの残りの部分から分離され、外部テクノロジー (フレームワーク、データベース、UI、外部テクノロジー) から独立して使用できるというものです。 API ).

さあ、ヘキサゴナル アーキテクチャの基本概念を詳しく見て、それがコードの設計方法をどのように変えることができるかを一緒に見てみましょう! ?

ヘキサゴナル・アーキテクチャーとは一体何でしょうか?

ヘキサゴナル アーキテクチャは、外部の詳細から独立しているようにアプリケーションを構築する方法です。アプリケーションをいくつかの個別のレイヤーに分割することで、関心事の分離を強調します。

目標は、アプリケーションの中心部 (ビジネス ロジック) と外部の世界 (データベース、ユーザー インターフェイス、API、フレームワークなど) の間のやり取りを整理することで、アプリケーションを特定のテクノロジから独立させることです。これはすべて、 ポート および アダプター

基本的なコンセプト

アプリケーションを、中心に ドメイン (ビジネス ロジック) がある六角形として想像してください。このコアビジネスは、実装の詳細 (Symfony、Doctrine、サードパーティ API など) に直接リンクされるべきではありません。これを実現するには、ポートと呼ばれるインターフェースを作成する必要があります。これらのインターフェースは、外部サービスとの通信を処理するアダプターによって実装されます。 ?

ポート

: 言い換えれば、外部の世界がビジネスコアと対話できるインターフェースです。ポートは、アプリケーション (API、HTTP リクエスト、CLI コマンドなど) の入口または出口ポイントです。 ?

アダプター

: アダプターは、これらのインターフェースの具体的な実装です。これらは、外部の要求または応答をビジネス ロジックで理解できるアクションに変換します。これには、データベース、フレームワーク、API などとの対話が含まれます。 六角形アプリケーションの構造

よりよく理解するために、Symfony の簡単な例を使用します。アプリケーションがユーザーに

注文

を許可する必要があり、これらの注文を保存するためにデータベースと対話する必要があると想像してください。 それでは、ヘキサゴナル アーキテクチャに従ってアプリケーションをどのように構築できるかを見てみましょう。 ?

1. ビジネスの中心

これはアプリケーションの

コア

であり、外部依存関係がない部分です。ここには、注文の作成やデータの検証などのビジネス ロジックが存在します。

Découverte de lここで、Order クラスは注文の基本モデルを表します。このクラスは、データがどのように保存されるか、データがどこから来たのかについて何も知らないことに気づくでしょう。

2. ポート (インターフェース)

ポートは、ビジネス ロジックが機能するためにアダプターが実装する必要がある

インターフェイス

を定義します。それらは、システムへの エントリ ポイント (HTTP リクエストなど) または 出口ポイント (データベースへの呼び出しなど) である可能性があります。

Découverte de lOrderRepositoryInterface インターフェイスは出力ポートとして機能します。ビジネス ロジックがデータベースと対話するために必要な

メソッドを定義

するだけです。ドメインは、このデータがどのように保存されるかを知りません。 3. アダプター (実装)

アダプターは、非常に単純にポートの具体的な実装です。アダプターを使用すると、次の翻訳が可能になります:

ビジネス ロジックに対するすべての外部インタラクション
  • 具体的なアクション (データベースへの保存など) に向けたビジネス ロジック。

ここで

Adapt は OrderRepositoryInterface への呼び出しを Doctrine (データベース管理ライブラリ) との対話に変換しますが、ビジネス ロジックは Doctrine が使用されていることを認識しません。

4. Symfony のコントローラーの例

コントローラーは、アプリケーションのエントリ ポイントとして機能します。 HTTP リクエストを介してユーザーと対話し、ポートアダプター を介してタスクをドメインに委任するのは彼です。

Découverte de l

ここでは、コントローラーが OrderRepositoryInterface インターフェイスのみを認識し、具体的な実装を認識していないことがわかります。これにより、コードはテスト可能、拡張可能になり、外部フレームワークやテクノロジー (Symfony、Doctrine など) から独立します。

なぜ六角形のアーキテクチャを使用するのでしょうか?

  1. ビジネス ロジックを外部実装 (データベース、HTTP、外部 API) から分離することで、コードの柔軟性が高まります。データベースやフレームワークの変更がより簡単になり、リスクが軽減されます。

  2. ビジネス ロジックは外部要素に関連付けられていないため、テストでアダプターを簡単にモックしたり置き換えたりできます。

  3. この明確な分離により、ビジネス ロジックに影響を与えることなく、新しい機能の追加、動作の変更、または特定のコンポーネントの再利用が簡単になります。

  4. 同じコア ビジネスを異なるタイプのアダプターで再利用できます。たとえば、同じビジネス ロジックを Web アプリケーション、REST API、さらにはコマンド ライン インターフェイスにも使用できます。

でも気をつけてください!

六角形アーキテクチャは強力ですが、この方法でアプリケーションを構造化するのは、特に小規模なプロジェクトの場合、少しやりすぎになる可能性があります。小規模なアプリケーションの場合、すべてをデカップリングする必要があるとは限らないため、六角形のアーキテクチャにより不必要な複雑さが増す可能性があります。

以上がヘキサゴナル アーキテクチャの発見: 堅牢でスケーラブルなコードを実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。