0

依存性注入を使用したコード フレームワークの設計についていくつか質問があります。

FLOW3またはDoctrineはアノテーションを使用して、クラス インスタンスをオブジェクト プロパティに注入します。これはコードリフレクションで行われます...そしてパフォーマンスはbaaaaadです:D

このアプローチについてどう思いますか?

class Test extends Injector {
    protected $abc = '@Inject:/namespace/classname';
}

インジェクターは、クラスのプロパティをループして、文字列がで始まるかどうかを確認し、@Inject指定されたクラスのオブジェクトを作成します。

それはクールですか、それともひどいですか?

4

2 に答える 2

1

まあ..反射を扱うのは遅いです。それは議論の余地がありません。ただし、これには実行可能な回避策があります。APCを使用して、各クラスインスタンスの依存関係をキャッシュします。

とはいえ、あなたが話しているのは依存性注入(デザインパターン)ではなく、依存性注入コンテナ(DIC)であることを理解する必要があります。

DICは通常、コードで依存関係を使用するプロセスを自動化しようとするフレームワーク(またはその一部)です。これは通常、アップサービスロケーター(「グローバルレジストリ」のかわいい名前)のアンチパターンであり、さまざまなレベルの有害性があります。

だから...私の提案はこれでしょう:

  • DICを使用するコードベースを選択できない場合は、キャッシュを使用します。広範囲に。
  • 特定のサードパーティライブラリ/フレームワークに制限されていない場合-手動の依存性注入を使用します
于 2012-07-08T00:00:01.690 に答える
1

Doctrine の注釈を含むキャッシュを使用していない場合 (ソリューションよりも洗練されているため、デバッグが非常に難しくなります [これは、'@Inject で文字列が必要な場合を除いて、実際には唯一の問題です)。その中で]何かがうまくいかなかった場合)、あなたはそれを間違っています. 実稼働環境では、キャッシュを適切に設定すれば (ドキュメントを参照)、問題は発生しません:)

于 2012-07-07T23:54:26.137 に答える