コアポイント
多くのプログラマー(私自身が含まれているので、これは私が公に mea culpa )であると考えています(IOC)は依存関係注入(DI)の単なる同義語であると考えています。この考えにはかなり直感的な理由があります。DIの目的がクラスの設計を促進し、外部の協力者が周囲の環境から提供されるようにすることである場合、それらを探すのではなく、このプロセスは効果的に考慮することができます。 IOCフォーム。ただし、方程式Di = IOCは一般に有効ですが、反転自体を制御するという概念は実際にははるかに広いです。実際、DIはIOCを利用する特定のユースケースであると言えますが、それは唯一のものとはほど遠いものです。これにより、DIがIOCの利点に依存しているモデルである場合、IOCとは何ですか?従来、アプリケーションコンポーネントは実行環境を操作および制御するように設計されており、このアプローチはある程度うまく機能します。たとえば、ロギングモジュールを実装してファイルにデータを記録し、データが記録される方法と時期はモジュールによって完全に制御されます。ログファイル(この場合、環境の一部)は、モジュールの仕組みに影響を与えない外部のパッシブ要素にすぎません。ただし、モジュールの機能を拡張し、データベースにデータをさらにログに記録できるようにする必要があると仮定します。モジュールをアップグレードして追加の機能を公開すると、その複雑さが増し、これらの追加タスクを処理するために必要なロジックが同じAPIの後ろにパッケージ化されるため、ますます肥大化します。このアプローチは機能しますが、まったく拡張することはできません。この状況は、かなり簡単な方法で解決できます。モジュールにデータを複数のエンドポイントに記録するために完全に責任を負わせるのではなく、責任を外部環境に直接シフトできます。モジュールの実装は非常にシンプルに保たれ、シンプルなイベントスケジューラとして機能することに限定されます。一方、環境は、問題のモジュールから完全に独立したエンドポイントにデータを記録するために必要なすべてのロジックを実装する責任があります。当然のことながら、コンポーネントと環境間のこれらの責任を逆転させるプロセスは、コントロール反転(またはより簡単な用語で、ハリウッドの原則)と呼ばれ、スケーラブルで高度に分離されたプログラムモジュールを開発する場合、その実装は実際の改善になります。もちろん、IOCは言語に依存しないパラダイムであるため、PHPの世界で簡単に使用できます。
コントロールの逆転を実装します - フィールドのオブジェクトを観察します
IOCは確かにどこにでもあるので、生産の実装を簡単に見つけることができます。頭に浮かぶ最初のユースケースは依存噴射ですが、特にイベント駆動型のデザインの分野では、他にも多くの同様に代表的なユースケースがあります。イベント処理メカニズムでIOCが機能する並列宇宙を知りたい場合は、GOFライブラリの古典的なケースであるオブザーバーパターンを検討してください。オブザーバーは、JavaScriptを介してクライアント側でもほとんどどこでも使用されており、IOCの概念の顕著な例があります。主題によってトリガーされたイベントを処理するために必要なロジックを実装するため。イベントや新しいイベントに対処する方法は、主題の責任ではなく、オブザーバーの責任です。例は、以前の長い声明をより明確にするための素晴らしい方法かもしれません。したがって、ブログの投稿とコメントの間に1対多数の関係を定義するプリミティブドメインモデルを実装したとします。この場合、意図的に野心的であり、新しいコメントが投稿に追加されたときにシステム管理者に通知する電子メールを送信できるようにします。正直なところ、IOCに頼らずにそのような機能を実装することは、実際にはドメインオブジェクトにその範囲を超えて何かを行うように依頼するため、実際に混乱するでしょう。代わりに、IOCベースのアプローチを取得して、次のドメインクラスを定義できます。
(ここでは、コードの例は省略されています。これは、コンテンツのこの部分は、質問に必要な擬似オリジナリ性とは関係がなく、長すぎるためです。)
外部環境への信頼制御 - コメント通知サービスを実現
ブログ投稿に新しいコメントを追加するときに電子メール通知をトリガーするオブザーバーサービスを構築することは、単純化する単純なプロセスであり、関連するメソッドを実装するクラスを定義します。 (上記と同じ理由で、コードの例もここで省略しています。)update()
概要
コントロールの反転は、特にPHPではあいまいな概念と見なされることがよくあります。多くの開発者は、通常の依存関係注入と関連付ける傾向がありますが、正しく実装されれば、プログラムするための簡単で強力な方法です。テストからコンポーネントを簡単に分離できる分離された直交システム。アプリケーションで依存関係注入を使用する場合(実際に使用していますよね?)、プログラマーの本能は、コントロールの反転が提供する利点をすでに利用しているため、プログラマーの本能が十分に満足していると感じる必要があります。ただし、以前に実証しようとしたように、クラスの依存関係を正しい方法で管理する以外に、このアプローチに適合する多くの状況があります。もちろん、イベント駆動型のデザインは良い例です。(ここではFAQパーツが省略されています。上記と同じ理由です。)
以上がPHPマスター|制御の反転 - ハリウッドの原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。