Laravel では、制御の反転の利点は、IOC コンテナを使用して依存モジュールやオブジェクトを分離できることです。指定されたサービスが使用に適していない場合、開発者定義のサービスを変更する必要はありません。指定されたインターフェイスを通じて、置き換える適切なサービスを見つけます。
#この記事の動作環境: Windows 10 システム、Laravel バージョン 6、Dell G3 コンピューター。
laravel 自体はサービス コンテナとも呼ばれる IOC コンテナです。
サービス コンテナはクラスの依存関係を管理し、実行します。依存関係の注入 ツール
制御の反転の機能は、サードパーティを使用して依存モジュールまたはオブジェクトを分離することです。このサードパーティは IOC コンテナです。
コンテナには、開発者が簡単に呼び出せるように必要なサービスが格納されます。したがって、これらのサービスの管理を容易にする (分離を実装する) ために、Laravel はこれらのサービスを直接呼び出さないことにしました たとえば、開発者はメソッド 1 を定義しましたが、これは元々サービス B にバインドされ、サービス B を通じて実装されました。は B ではなくなりましたが、インターフェイス A が定義されており、サービス B はインターフェイス A を通じて実装されています。
このプロセスでは、サービス B は元々開発者の特定の機能を制御できましたが、開発者はこのサービスを直接呼び出すのではなく、インターフェイス A に置き換えます。したがって、サービス B はこの機能を制御できません。制御を失い、インターフェイス A が関数の制御を獲得すると、このプロセスは 制御の反転
と呼ばれます。メリットは次のとおりです:
If サービス Bが適切でなくなった場合、インターフェイス A は、開発者の方法 1 を変更することなく、ニーズに合った別のサービスを見つけて置き換えることができます。インターフェイス A にどのサービスを使用するかについては、この方法について心配する必要はありません。このインターフェイス A がサービス B を実装したい場合、サービス B を実装するクラスはこのインターフェイス A を継承し、インターフェイス A によって定義された抽象メソッドをこの B クラスに実装する必要があります。
このインターフェース A は、このサービスのプロバイダーとみなすこともできます。 laravelには複数のサービスプロバイダがあり、それぞれが対応するコンポーネントを形成します このようなlaravelフレームワークを形成する複数のコンポーネント
インターフェイスAがあり、インターフェイスBCDEが非常に多いため、管理を容易にするためには、規定のサービスを提供する 作成者の形式およびメソッドのパラメータを使用してルールを制約します。この概念は次のように呼ばれます: 契約
契約の利点は、制約ルールが満たされている限り、置き換えることができることです。
**ファサード** (ファサードと呼ぶこともできます) は、実際には、開発者がコンテナにバインドされたさまざまなサービスに簡単にアクセスできるようにする静的インターフェイスまたはプロキシのセットです。 Laravel にはキャッシュなどのいくつかのファサードが付属しています。 Facade はコンテナからオブジェクトにアクセスするために使用できるクラスであり、この関数は Facade クラスで定義されます。 Laravel のファサードと自分で定義したファサードは、Facade クラスを継承します。一般に、クラスの上で使用する use xxxx はすべてファサードです。詳細については、リンクを参照してください: https://www.jianshu.com/p/a96715975d4e
それでは、サービスが次のような場合はどうなるでしょうか。実装されていない場合は、新しいサービスを登録して初期化する必要があります。コンテナに登録されている場合にのみ、コンテナはそのサービスを呼び出すことができます。この作業はサービス プロバイダーによって実装されます。トピックに戻る
依存性注入とは: 開発者のメソッド 1 は中間者インターフェイス A を定義します。このインターフェイス A は、メソッド 1 が属するクラス 1 のコンストラクターにパラメーターの形式で格納できます。このプロセスは依存性注入と呼ばれます。 内部で生成されるもの (初期化、コンストラクター __construct 内のファクトリ メソッド、または自分で手動で new するなど) ではなく、パラメーターまたは他の形式で外部から注入される限り、依存性注入に属します依存性注入はどのように行うのですか?非常に単純です: $biller = new StripeBiller(new SmsNotifier);これは依存関係の注入です。課金クラス StripeBiller はユーザーへの通知方法を考慮する必要がないため、通知実装クラス SmsNotifier のインスタンスを直接渡します。コードの観点から見ると、これはほんの小さな変更にすぎないかもしれませんが、このデザイン パターンの導入により、アプリケーション アーキテクチャ全体が確実に新しく見えるようになります。クラスの責任の境界が明確に指定されているため、異なるレイヤーとサービス間の通信が実装されます。分離すると、コードの保守が容易になります。さらに、インターフェイス指向プログラミングの観点から、コードのテストが容易になります。シミュレーションを通じて依存関係を注入するだけでよく、異なるクラス間のテストは完全に分離できます。[関連する推奨事項: laravel ビデオチュートリアル
]###以上がLaravelにおける制御の反転の利点は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。