わかりましたので、ロガー、http リクエスト、http レスポンス、ルーターなどの単一インスタンス オブジェクトを作成および管理する、このサービス マネージャー/ロケーター/ファクトリ オブジェクトがあります。
startup/bootstrap ファイルでは、インスタンス化してサービスを開始します。
$services = new Services();
$logger = $services->getService('logger');
$security = $services->getService('security');
$auth = $services->getService('auth');
$router = $services->getService('router');
etc...
各サービスの依存関係を認識し、ファクトリのようにオブジェクトを簡単に作成します。
Auth
たとえば、私のクラスです。数か月で何らかの形でさらに2つの依存関係が必要な場合は、次のようにする必要があります。
Services
クラスをインスタンス化するクラスのメソッドを変更しますAuth
。- クラスのコンストラクターを変更
Auth
し、2 つの新しい依存関係を追加します。
5分もかかりません。
この$services
オブジェクトは、コントローラーのインスタンスも作成します。すべてのコントローラーには、(現時点で) 1 つの依存関係 ( View
.
これに関する問題は、明らかに同じ依存関係を持つさらに 20 個のコントローラーを作成すると、数か月後にコントローラーにさらに 2 つの依存関係を追加する必要があることです。
Services
クラスをインスタンス化するクラスのメソッドを変更しますController
。- すべてのコントローラー クラスのコンストラクターを変更し、2 つの新しい依存関係を追加します。
サービスマネージャー/ロケーター/ファクトリーオブジェクトの外部でコントローラーを個別に作成し、代わりに$services
オブジェクトをコントローラーに注入すると、私が作成するすべてのコントローラーが1つの依存関係しか持たないことがわかります。私はそれらを何百万も作ることができ、別の依存関係が発生した場合、すべてのコントローラーファイルを変更する必要はありませんが、これは問題ありませんか?
サービスマネージャーから1つまたは2つのサービスしか必要としない場合、コントローラーに多くを注入するように感じます。また、コントローラーの依存関係を隠します。コンストラクターに注入する場合ほど目に見えません。 .
これについてどう思いますか。そして、私は何をすべきだと思いますか?
ありがとう。