0

Zend Framework 3 で新しいアプリケーションを作成していますが、デザイン パターンについて質問があります。

多くの詳細を入力しなくても、このアプリケーションには複数のサービスがあり、外部 API に接続され、さらに複数のデータベースに接続されます。ワークフローも非常に複雑です。複数の外部情報 (ユーザーログイン、設定など)。

依存性注入と Zend Framework 3 Service Manager については知っていますが、特定のケースでフローが実際にそれらのいくつかのみを使用する場合、sereval サービスのインスタンス化について心配しています。また、他のサービスに依存するサービスもあります。シングルトンの使用を考えていました。

ここでシングルトンは本当に解決策ですか? Zend Framework 3 でシングルトンを使用する方法を探していましたが、サービス マネージャーのインスタンスを取得できないため、サービス内でサービス マネージャーを使用する方法が見つからないため、簡単な方法がわかりませんでした。工場システムの外。

Zend Framework 3 でシングルトンを実装する簡単な方法は何ですか?

4

1 に答える 1

2

シングルトンを使用する理由

サービスマネージャーからサービスを取得したときにのみ開始されるため、サービスマネージャーでサービスが多すぎることを心配する必要はありません。

また、ファクトリ以外の別のクラス内でサービス マネージャーを使用しないでください。ZF3 では、何らかの理由でコントローラーから削除されています。それらの1つはテスト可能性です。すべてのサービスがファクトリで注入されている場合、テストを簡単に作成できます。また、来年自分のコードを読むと、クラス内で必要な依存関係が簡単にわかります。

必ずしも必要ではないクラス内に注入されているサービスが多すぎることがわかった場合は、次のことができます。

  • ProxyManagerを使用します。この遅延はサービスをロードしますが、メソッドが呼び出されるまでサービスを開始しません。
  • サービスを分割する: 一部のパーツをサービスから新しいサービスに移動します。例: すべてを UserService に配置する必要はありません。UserRegisterService、UserEmailService、UserAuthService、および UserNotificationsService を使用することもできます。

ZF3 の代わりに、 zend-expressiveも考えられます。詳しくは説明しませんが、これは軽量のミドルウェア フレームワークです。ミドルウェアを使用して、リクエストに必要なものを検出し、リクエストを処理するために必要なアクションにルーティングできます。このようなことはおそらくZF3でも行うことができますが、他の誰かがそこで行う方法を説明できるかもしれません.

于 2016-09-20T05:49:19.670 に答える