はじめに
AOP (アスペクト指向プログラミング) について聞いたことがありますか? AOP は PHP ではあまり使用されていないように見えますが、エンタープライズ レベルの開発では広く使用されています。この記事では、PHP の AOP について紹介します。
この記事では主にAOPの概念について説明します。
AOPとは何ですか?
アプリケーション開発では、多くの機能が必要になり、それらの機能がコード内の複数の箇所に散在していることがよくありますが、これらの箇所は実際には実際のビジネスとは何の関係もありません。たとえば、いくつかの特別なタスクを実行する前に、ユーザーがログインしていることを確認する必要があります。これらの特別な人々を「横断的な関心事」と呼びます。「横断的な関心事」(水平的な関心事) の定義を理解するために、Wikipedia を使用してみましょう。関係) 。
コンピューター サイエンスでは、「横断的な関心事」は「アスペクト (または方向) プログラミング」を指します。これらの関係は他のシステム (フレームワーク設計または実装) から十分に分解されていないため、コードの重複、システム内での意味のある依存関係、またはその両方が存在します。
これで、「水平関係」の基本を理解できたはずです。コードでどのように見えるかを見てみましょう。
あなたがブログ サイトの編集者であるシナリオを想定してください。サイトにログインして、投稿の作成、投稿の確認、投稿の編集などを行う必要があります。ログインしていない場合は、ログイン画面に直接移動する必要があります。これらの動作が安全であることを確認するには、上記の操作のいずれかを効果的に検証する必要があります。コードは次のとおりです。 // ログインにリダイレクトします
;
単一責任の原則は、各クラスが 1 つの責任 (タスク) のみを持つべきであり、責任全体が 1 つのクラスにカプセル化される必要があることを示しています。すべてのサービスは、責任に応じて厳密かつバランスの取れた方法で配分される必要があります。
ここまでのところ、AOP が何を意味するのか理解できました。水平方向のアスペクト関係は、「アスペクト」と呼ばれるクラスにグループ化されます。アスペクト指向の関係をコア コードから分離するプロセスは、アスペクト指向プログラミングと呼ばれます。
AOP 専門用語
AOP の特性を説明するために特に使用される条件が多数あります。これらの条件を理解することが、AOP をプロジェクトに正常に統合するための鍵となります。
アスペクト
アドバイス
ジョインポイント
ポイントカット
アスペクト(Aspect)とは何かを学びました!さて、他の 3 つの条件が何を意味するのか理解しましょう。
アドバイス
アドバイスは、その名前が示すように、特定の状況で何をいつ行うかを定義するために使用されます。前の例では、checkAuthentication (何をすべきか) はアドバイス (通知) であり、指定されたメソッドではコードが実行される前 (実行されるとき) に呼び出される必要があります。
Joinpoint (アクセスポイント)
Joinpoint はアドバイス アプリケーションを作成する場所です。前のコードをもう一度見ると、ビジネス ロジックに直接関係のないいくつかの関数を呼び出していることがわかります。たとえば、createPost() では、検証ロジックを実行する前と管理者にメッセージを送信した後に、横断的な問題が発生する必要があります。これらはすべてアクセス ポイントである可能性があります。
アクセス ポイントはアプリケーション コード内のどこにでも配置できます。ただし、Advice は、後で説明する AOP フレームワークに応じて、特定の時点でのみデプロイできます。
Pointcut
Pointcut は、通知を特定のアクセス ポイントに一致させる方法を定義します。この例にはアクセス ポイントのペアしかありませんが、アプリケーションには数千のアクセス ポイントを含めることができ、すべてのアクセス ポイントに通知を適用する必要はありません。必要と思われる数のアクセス ポイントを通知にバインドできます。
createPost()、approvePost()、editPost()に通知したいが、viewPost()がないとします。何らかのメソッドを使用して、これら 3 つのメソッドを通知にバインドします。次に、アスペクトの詳細を含む XML ファイルを作成します。このファイルには、アクセス ポイントに一致するいくつかの正規表現が含まれています。
要約: アプリケーションに水平切断関係がある場合、ポイント切断の使用を選択する一部のアクセス ポイントに通知機能を適用するアスペクトを作成できます。
AOP 通知タイプ
通知コードはさまざまな方法で表現できます。これらの通知コードは使用しているフレームワークに依存すると前述しましたが、理解しておく必要があるタイプがいくつかあります。以下を参照してください:
事前通知
復帰後通知
スロー後通知
ペリフェラル通知
事前通知
コード内の特別なポイント (通常はメソッド呼び出し) の前にアドバイスを使用します。
これまでのところ、概念を単純化し、コードをより早く理解できるようにするために、通知をメソッドに記述することがよくあります。しかし、実際の環境では、通知がメソッドに記述されていないことがよくあります。独立したコントローラーが存在し、各メソッドがこのコントローラー内にあり、各メソッドが AOP 機能をラップする必要があります。このグローバル コントローラーはシステム全体で実行されており、私たちには見えません。
復帰後の通知
この通知は、指定された機能の実行後に一度だけ実行され、そのアクセスポイントに戻ります。次のコードを考えてみましょう。 コードをコピーします
コードは次のとおりです。関数名();
ペリフェラル通知
4 番目の通知はペリフェラル通知で、事前通知と復帰後通知を組み合わせたものです。