PHP 8.2:新機能は?
PHPの新バージョンは目前。あなたが知っておくべき新しい実装とは何でしょうか?この記事で確認してほしい!
ソフトウェアの保守性、テスト容易性、適応性を高める六角形アーキテクチャの力を探る。
この包括的なガイドでは、以下のニュアンスを掘り下げていく。 六角形建築その定義、構成要素、歴史を探る。私たちは 六角形建築 や他の一般的なアーキテクチャー・パターンと比較することで、そのユニークな強みを浮き彫りにする。また、ドメイン駆動設計(DDD)やマイクロサービスにおける重要な役割についても検証する。 ソフトウェア開発.
のダイナミックな風景の中で。 ソフトウェアアーキテクチャ, 六角形建築として知られている。 アダプターパターンの規範に徐々に挑戦している。 伝統的な階層アーキテクチャ.
容易なテストと高い保守性を保証するアーキテクチャ設計の必要性に駆られた、 六角形建築 が考案された。その使命は ソフトウェアアプリケーション 外の世界の複雑さや気まぐれに左右されることなく。
この記事を通して、私たちは「ヴェルディの歴史」を旅することになる。 六角形建築 - シンプルさと力強さの接点に位置する建築である。その歴史、構造、原理を紐解き、さらに他の建築と比較する。 建築パターン.ソフトウェア・アプリケーションの品質を向上させ、ソフトウェア業界を悩ませる技術的負債を減少させる可能性を検証する。
その核心は、 六角形建築または港湾 アダプター・アーキテクチャアプリケーションを内部と外部の2つの主要なセクションに分割する。アプリケーションを内部と外部の2つの主要なセクションに分割する。
アプリケーションコアとも呼ばれる内部には ビジネスロジック とドメインオブジェクト、つまりソフトウェアの価値の核となるものです。この内なる聖域は外部の影響から切り離されたままであるため、ソフトウェアの完全性が保たれる。 ビジネスロジック そしてドメインモデル。
一方、外部とは、外部システムの領域である。 ユーザーインターフェース からデータベース・アクセスまで、アプリケーション・コアと相互作用する。これらの相互作用は、ポートやアダプターのメカニズムを通して管理され、アプリケーション・コアとアプリケーション・コアの間のクリーンな分離を保証する。 アプリケーションコア そしてその外部アクターたち。
六角形建築 アリステア・コックバーンの発案によるものである。 階層アーキテクチャ.これは、テクノロジーにとらわれない ドメイン層 コアを孤立させる ビジネスロジック などの外部からの影響から ユーザーインターフェース コード とデータベースへのアクセス。
伝統的な 階層アーキテクチャあるレイヤーの変更が他のレイヤーに波及し、意図しない結果を招く可能性があったからだ。さらに、レイヤー間の複雑な依存関係によってテストが複雑になっていた。
六角形建築 その解決策として浮上したのが、システムの一部分を変更しても、他の部分が動揺しないモデルを提供することだった。要するに ビジネスロジック ウェブ・インターフェイス経由でアクセスされているかどうかには関係ない。 REST APIあるいは コマンドライン.
六角形建築図式化すると六角形に見えることからこの名がついた。 ドメインモデルポート(プライマリとセカンダリ)、アダプタ(プライマリとセカンダリ)。
について ドメインモデル をカプセル化したソフトウェア・アプリケーションの心臓部である。 ビジネスルール とコア・ロジックから構成される。このモデルに存在するドメイン・オブジェクトは、特定のビジネス・バリューとルールを保持する。
次にポートである。 ドメインモデル そして外の世界。 プライマリーポート アプリケーションの ビジネスロジックアプリケーションコアへのゲートウェイとして機能する。これらはアプリケーションがサポートするユースケースを表している。
セカンダリーポート一方、外向きである。永続化レイヤーや外部サービスのように、アプリケーションが外界から必要とするインターフェースを表します。
最後に、アダプターがある。 ドメインモデル と外界をつなぐ。で使用されるフォーマットからデータを変換する。 外部システム で使用されるフォーマットに ビジネスロジックその逆も然りである。
ポートとアダプター の架け橋となる。 アプリケーションコア と外部アクターです。プライマリポートは、アプリケーションが公開するビジネスユースケースを表し、外部のアクターがアプリケーションとやり取りできるようにします。これらは ビジネス層.
一方、セカンダリポートは、アプリケーションが外部から必要とするインターフェースです。これらは、データベースアクセス、ウェブサービス、あるいはタイムサービスのようなサービスです。セカンダリー・ポートは、技術やベンダー固有の特性とは無関係に、アプリケーションが必要とするものを公開します。
アダプターは、これらのポートの物理的な現れである。アダプタは、データを ビジネスロジック を外部アクターが使用する形式に変換したり、その逆を行ったりします。これらのアダプタは、REST API、SQL データベース、またはメッセージング・システム用のテクノロジー固有のアダプタ変換である場合もありますが、バッチ・スクリプトまたは ユーザーインターフェース コードで構成される。アダプターはアプリケーションの境界を形成し、アプリケーションを技術にとらわれないものにする。
プライマリ・ポートは、アプリケーションが実行できる操作、つまりコア・ドメインが受け付けるコマンドを表します。これらは多くの場合、以下のような言語のインターフェースとして実装されます。 ジャワアプリケーションがどのような操作を提供するかを定義する。プライマリーアダプターしたがって、特定の外部アクターに対するこれらのインターフェイスの実装である。
一方、セカンダリポートは、コアドメインが外部とやりとりするために使用する インターフェースである。これには、ドメインオブジェクトを永続化したり、通知を送ったりするための インターフェースが含まれる。 セカンダリーアダプター は、これらのインターフェイスの実際の実装である。 SQLデータベース たとえば、電子メール通知アダプタなどである。
ともに プライマリおよびセカンダリ・ポートとアダプタ を分離し、アプリケーションの周囲に柔軟でモジュール化された境界を形成する。 ドメインロジック 技術的な懸念から。責任の明確な分離を強制し、システムの異なる部分が独立して進化することを可能にする。
ディペンデンシャル・ルール(従属性ルール)は、サッカーにおける基本原則である。 六角形建築 依存関係はアプリケーションのコアの内側を向いているべきだということです。アプリケーションのコアは、特定のデータベースやUI、その他の外部機関には依存しない。
この原則は 依存関係の逆転原理 (DIP)は、オブジェクト指向設計のSOLID原則の1つである。DIPは、高レベルモジュール(ビジネスロジック または ドメイン層 データベース・アダプターのような)低レベルのモジュールに依存してはならない。その代わりに、抽象化されたモジュールに依存すべきである。このように依存関係を逆転させることで、高位モジュールを低位モジュールの変更から分離することができ、高位モジュールが低位モジュールに依存しないような設計を促進することができる。 ビジネスロジック が全体的なアーキテクチャーを動かしている。
地図作成は、この分野で不可欠なプロセスである。 六角形建築で使用されるフォーマットから、技術固有のアダプターがデータを変換する。 外部システム を私たちの ドメイン層 を理解することができます。このマッピングは、アプリケーションの内部と外部のデータ表現間の変換を容易にする。
例えば、HTTPリクエストが REST APIリクエストデータは、JSONからアプリケーションが使えるドメインオブジェクトに 変換される必要がある。この変換はアダプタの責任です。
逆に、アプリケーションがレスポンスを送信する必要がある場合、アダプターはドメインオブジェクトをJSONに変換する。これによって、コアアプリケーションは、外部世界の仕様に無知なままで、受信データを正しく解釈し、送信データをフォーマットできるようになる。
六角形建築 それは、ソフトウェア・アプリケーションをその外部要素から切り離し、システムのさまざまな部分を明確に区別することに起因している。
基本的な利点のひとつは、懸念事項の分離であり、コードの保守性と可読性を促進する。コアの分離 ビジネスロジック より 外界 テクノロジー固有のアダプタ、データベース、および ユーザーインターフェース コアはそのままに ビジネスロジック.
六角形建築 また、テストしやすいという点でも優れている。このアーキテクチャは外部依存性を排除しているため、開発者は自動リグレッションテストを実行し、次のようなテストを書くことができる。 自動テスト・スイート より簡単になります。このように分離することで、1つのコンポーネントの変更が他のコンポーネントに悪影響を与えないため、アプリケーションの耐障害性が高まります。
さらに、このアーキテクチャは同じポートに対して複数のアダプタをサポートしており、同じセカンダリポートに対して複数のアダプタを使用することができる。この柔軟性により、アプリケーションは異なるタイプのデータベースと相互作用したり、様々な種類のデータベースをサポートすることができる。 ユーザーインターフェース のプラットフォームである。
ソフトウェア開発の領域では、保守性はしばしば求められる特性だが、伝統的なアーキテクチャー・スタイルが提供するには苦労するかもしれない。 六角形建築 保守性を重視する姿勢が際立っている。
利害の分離を重視することで 六角形建築 は、アプリケーションの一部分で行われた変更が他の部分に波及しないことを保証する。この特性は、コードの理解とデバッグに費やす時間と労力を削減するのに役立つ。
さらに、このアーキテクチャは、コアとなる ビジネスロジック は、アプリケーションを駆動するために使用される特定のテクノロジーから切り離されている。このデカップリングによって、開発者はアプリケーションの入れ替え、アップグレード、リファクタリングが可能になる。 外部インタフェース コアロジックに影響を与えることなく、バグを引き起こすリスクを低減する。
ソフトウェア開発における重要な懸念事項である技術的負債とは、コードのリファクタリングやショートカットやハックの修正にかかる将来のコストのことである。 六角形建築 は、そのような負債を軽減するための積極的なアプローチを提供している。
核となる部分を明確に分離することで ビジネスロジック そして 外部コンポーネント, 六角形建築 により、メンテナンスに頭を悩ませ、技術的負債を増大させるようなコードが絡み合う可能性が低くなる。アーキテクチャが本来持っている保守性とテスト容易性も、技術的負債を減らすのに一役買っている。
その上、このような 六角形建築 を変更することなく、インフラの変更をサポートする。 ビジネスロジック は、技術的負債に対する保護バッファを提供する。この能力により、チームはアプリケーションの大部分を書き直すことなく、要件や技術の変更に対応することができる。
実際には 六角形建築 は、ソフトウェア開発に構造的なアプローチをもたらす。コア・アプリケーションを囲む六角形の境界線は、アプリケーションの終了点と、アプリケーションの終了点を明確に区分けする。 外界 が始まる。
アダプタはゲートキーパーの役割を果たし、外部のアクターからのリクエストをコアアプリケーションが理解できる形に変換する。そうすることで、コアアプリケーションは、データベースであれ 外部APIまたは ユーザーインターフェース.
ドメイン駆動設計(Domain-Driven Design:DDD)とは、ソフトウェア開発手法の1つで、ビジネスの中核となる概念、すなわち「ドメイン」を優先して設計する手法である。 ドメインロジック設計の主要な原動力として。この方法論は 六角形建築の重要性も強調している。 ビジネスロジック そして ドメインモデル 建築の中で。
という文脈では 六角形建築DDDは、アプリケーションの上位モジュールであるドメイン層が、以下のような外部要素から独立していることを保証する。 ユーザーインターフェース またはデータベースから独立している。この独立性はポートやアダプターによって保証されている。 外部システムを可能にする。 ドメインロジック 独立して進化する。
しかもだ、 六角形建築 は、DDDの戦略的設計原則を補完するものであり、これには境界コンテキストの概念も含まれる。DDDの各境界コンテキストは、以下の六角形として想定することができる。 六角形建築ドメインモデルを中核とし ポートとアダプター 境界線として機能する。
もうひとつの現代的なアーキテクチャスタイルであるマイクロサービスは、次のような利点があります。 六角形建築.マイクロサービスの分散化された性質(各サービスが特定のビジネス能力をカプセル化する)は、次のようなカプセル化とうまく整合している。 ビジネスロジック 六角形のコアの中に。
各マイクロサービスが他のサービスと疎結合であるべきなのと同じように、各六角形は 六角形建築 も他から隔離され、定義されたポートとアダプターを通じてのみ通信する。これにより、各マイクロサービスは独自の 六角形建築その結果、自律的で疎結合なサービスの集まりが生まれる。
によって提供される隔離。 六角形建築 は、マイクロサービスの複雑さと分散性に対処する際に特に有用である。を分離することで コア・ビジネス・ロジック 外界から、 六角形建築 を保証する。 ビジネスロジック 他のサービスや 外部システム.
ソフトウェアの設計方法は、それが時間とともにどのように進化するかに大きな影響を与える可能性があります。比較する 六角形建築 他のアーキテクチャと比較することで、その長所と潜在的なトレードオフをより深く理解することができる。
レイヤード・アーキテクチャー は伝統的な 建築模様 このパターンは、アプリケーションを論理的なレイヤー(多くの場合、プレゼンテーションレイヤー、ビジネスレイヤー、データアクセスレイヤー)に構造化します。このパターンの主な欠点は、レイヤー間の強い依存関係を助長し、1つのレイヤーの変更がアプリケーション全体に波及する状況をもたらすことです。
対照的だ、 六角形建築 はそのような依存関係を最小限に抑える。レイヤーの代わりに アプリケーションコア は、交換可能なアダプタに囲まれている。たとえば、データベース・サーバーを変更しても、対応するアダプターにしか影響しない。 アプリケーションコア などのアダプターはそのまま。
クリーンな建築別の 建築模様と多くの共通点がある。 六角形建築.両者とも懸念の分離を強調し、核心部分を切り離すことを目指している。 ビジネスルール を遵守すること。 依存関係の逆転原理.
しかしだ、 六角形建築 がアプリケーションとどのように相互作用するかに重点を置いている。 外側 一方 クリーンな建築 はアーキテクチャー内部のより詳細な構造を提供する。言い換えれば クリーンな建築 のスーパーセットとして見ることができる。 六角形建築アプリケーションの内部構造を整理するための追加ガイダンスがあります。
オニオン・アーキテクチャー を孤立させることを目的としたもうひとつの建築様式である。 コア・ビジネス・ロジック より 外部インタフェース とインフラストラクチャーから構成される。ドメインモデルを中心とした同心円状のレイヤーがいくつかあり、各レイヤーはその内側のレイヤーにのみ依存することができる。
目標は同じだが、六角形と オニオン・アーキテクチャー それを達成する方法は微妙に異なる。 オニオン・アーキテクチャー は依存関係の方向に重点を置き、すべての依存関係が内側に向かうようにする。 六角形建築との相互作用に重きを置いている。 外界 ポートやアダプターを通して。
の重要な強みである。 六角形建築 は、テスト容易性に重点を置いていることだ。コア・アプリケーションを 外界 ヘキサゴナル・アーキテクチャーは、ポートやアダプターを通して、以下のような実行を可能にする。 自動テスト これは、ソフトウェアの安定性と正しさに確信を与えることができる。
においてである。 六角形建築その プライマリーポートコアをカプセル化する ビジネスルールを、外界から独立してテストすることができる。例えば、テスト中に実際のデータベースと通信する代わりに データベースアダプタ を実際のデータベースの動作をシミュレートするテスト・ダブルに置き換えることができる。これにより、開発者は ビジネスルールデータベースとのやりとりよりも。
しかもだ、 自動回帰テスト は、変更が加えられたときにシステムが期待通りに動作するかどうかを検証するために、簡単に構築することができる。このレベルのテスト可能性は、開発プロセスの早い段階で問題を検出し修正するのに役立つため、ソフトウェアの保守や更新を行う際に大きな利点となる。
さらに 六角形建築 また、統合テストもサポートしている。を置き換えることで 外部コンポーネント (データベースサーバーや 外部API)をテスト・ダブルでテストすることができます。 アプリケーションコア は、実際の外部システムを使用することなく、これらのコンポーネントと統合することができます。これにより、テストのスピードと信頼性を大幅に向上させることができる。
六角形建築 は、広大なソフトウェア開発戦略の中で魅力的なソリューションとして登場した。それは アプリケーションコア を外部環境から切り離すことで、高い保守性、テスト容易性、柔軟性を確保している。このように分離することで、開発者はコアの開発に集中しやすくなる。 ビジネスロジックの変化に対するソフトウエアの耐性を強化する。 外部システム.
ヘキサゴナル・アーキテクチャにはトレードオフがあるが、多くの利点があるため、あらゆる開発者のツールボックスにとって非常に価値のある資産となっている。この領域では ソフトウェアアーキテクチャヘキサゴナル・モデルはその優位性を主張し続けている。
この記事には コード例を徹底的に理解することを目的としている。 六角形建築 そしてその潜在的なメリット。効果的なアーキテクチャの秘訣は、パターンを盲目的に順守することにあるのではなく、基本原則を理解し、特定の要件を満たすために思慮深く実装することにあることを心に留めておいてほしい。
ヘキサゴナル・アーキテクチャーの領域では、次のようなインターフェイスが定義されている。 アプリケーション層 そして データ層 が最も重要である。あなたが ソフトウェアアーキテクト この方法論を採用しようと考えている開発者、あるいはその複雑さを理解しようと努力している開発者にとって、このアーキテクチャの影響力が増大し続けていることは明らかだ。効果的に活用できるさまざまな方法が示されている。例えば バンキング アプリケーションその リポジトリインターフェース をブリッジするセカンダリ・アダプタとして機能します。 アプリケーションのコア と 外部コード.このように分離することで 具体化 の ファイルシステム アプリケーション・サービスに影響を与えることなく、あるいは特定のテクノロジーに影響を与えることなく。
について 開発 チーム に取り組めるようになった。 左側 を気にすることなく、アプリケーションの 外部要因これによって、シームレスな進歩が保証される。というわけで、私たちは、この「ヴェルディの世界」の探検を終了する。 六角形建築これは、ソフトウェア開発全体に影響を与え続けているアーキテクチャー・スタイルである。