2009-05-09 9 views
1

私はPHP 5用のDIフレームワークを作成中です。依存関係注入に関するいくつかの単語の「公式の」定義を見つけようとしています。これらの単語の中には、「コンテキスト」と「ライフサイクル」があります。そしてまた、が作成/注入されたオブジェクトをと呼びますか?最後に、コンポーネントとサービスの違いは何ですか、注入することができるオブジェクトを呼び出す必要があるか(どちらかの場合)DI用語を私に説明できる人はいますか?

私はMartin Fowlerの記事を読んで、他のDIフレームワーク(Phemto、Spring、Google Guice、Xysterなど)を見てきましたが、私はあなたの考えを知りたいと思います。ありがとう!

+0

を持っているこれは、閉鎖を避けるために、このコミュニティのwikiをしてください行い、本当の問題ではありません。適切な答えを得るために、1つの具体的な詳細に焦点を当てた複数の質問をすることをお勧めします。 – lothar

答えて

2

コンピュータプログラミングにおける依存性注入(Dependency Injection、DI)は、ソフトウェアコンポーネントに外部依存関係を提供するプロセスを指します。これは、逆の懸念が必要な依存関係を取得するプロセスである、制御の逆の特定の形式です。

  • ライフサイクル:シングルトン、要求ごとの、過渡....どのくらいの容器に住むべき
  • コンポーネント:単純な定義であることができる:成分は、本明細書に記述されたオブジェクトです。オブジェクトが仕様に準拠している限り、仕様が何であるかは問題ありません:COM、Enterprise JavaBeansなど。
  • サービス:サービスという用語は、離散的に定義された連続的かつ自律的なビジネスまたは技術機能のセットを指します。
  • コンテキスト:提供された実装のコンテナレベルでのコンシューマへの分離。緑のページの黄金のパートナーが赤い靴下の15%の割引を受ける例があります。

は楽しい:)

+0

ありがとう、それは私が探していたものです! –

1

「公式な」定義があるかどうかわかりません。 Fowlerの記事は私がDIで読んだ最初の部分でした。それがあなたのために十分な権威を持っていないのであれば、私はSOがどのように改善するのか分かりません。

「見た」とはどういう意味ですか?どのくらいの書類を読んでいますか?あなたはそれを使ってアプリケーションを書くことを試みましたか?あなたがSpringとGuiceでコードを書いたのなら、あなた自身でこれを調べることはすでにかなりうまくいっています。もしあなたがちょうどGoogleが戻ったいくつかの記事を読んだら、あなたはもっとやる気があります。

「Spring」の「コンテキスト」は、オブジェクトをインスタンス化するために使用されるファクトリを意味します。私は通常、アプリケーションまたはWebアプリケーションごとに1つを持っています。私のアプリケーションは、通常、オブジェクトが作成される「コンテキスト」です。

DIのライフサイクルは変わりません。オブジェクトが作成、初期化、使用、および破棄されたときに関係します。

コンポーネントは、単一のソフトウェア成果物内のデータと操作です。サービスは、通常はネットワーク上に分散されたビジネス上重要な操作を実行する特別な種類のコンポーネントです。サービスは通常コンポーネントですが、すべてのコンポーネントがサービスではありません。彼らは同義語ではありません。

DIフレームワークなしでコンポーネントまたはサービスを書き込むことができます。それが注入されたオブジェクトのコンポーネントを呼び出すのに役立つなら、私のゲストになれます。

私は不思議です:なぜこれらのものの名前に重点を置いていますか?命名は確かに重要ですが、DIの主な問題ではありません。

+0

私は依存性注入の基礎を理解していますが、私はDIの実装に正しく言いたいです –

+0

普遍的に「正しい」正確な用語はわかりません。なぜそれほど大事なことだと思いますか?彼らの定義は十分に公式ではないので、春の人々は苦しんだと思いますか?それは起こるのを待っているバイクの流しの議論です、IMO。 – duffymo

+0

それは他の何よりも好奇心です、私はそれについて他の人の意見を求めるのは大したことではないと思いました。 –