8

私は可能な限り依存性注入を使用しようとしていますが、短命依存性のようなものに関しては問題があります。抽象ファクトリは「新規」を使用しますか?

たとえば、データベースで見つかったブログのリストを生成したいブログマネージャオブジェクトがあるとします。これを行うためのオプション(私が知る限り):

  1. 新しいブログ();
  2. $ this-> loader-> blog();
    • ローダーオブジェクトは、データベースオブジェクト、テキストフィルタのようなオブジェクトのさまざまな他のタイプを作成など
  3. ます$ this-> blogEntryFactory->()作成します。

しかし、強力なカップリングを生成するので、#1は悪いです。 #2は、オブジェクト・ファクトリが以前にインジェクションされていなければならないことを意味するので、それは悪いようです。

#3を使用すると、「新しい」キーワードをblogEntryFactory自体に入れますか?または、ローダーをblogEntryFactoryに挿入してローダーを使用しますか?

私はblogEntryFactory(例えば私はuserFactoryとcommentFactoryを持つことができます)のような多くの異なる工場を持っていれば、これらの異なる工場すべてに "新しい"キーワードを置くように見えます。私は、これは理にかなって願っています

...私はこれが、この特定のブログの例には不要な方法についていくつかの答えを持っていたが、場合によっては、実際には、そこにどこにする必要があります

NOTE抽象ファクトリーパターンを使用してください。これが私が得意とするポイントです。その場合に「新しい」を使用するのか、それとも何か他のことをしますか?

+0

私がこれを正しく、または完全に説明しなかった場合、私に知らせてください。 – johnnietheblack

+0

モデルクラスで依存性注入が使われたことはありません。 'Blog'クラスがいくつかのビジネスロジック(ほとんどモデルではありません)をカプセル化しない限り、カップリングを減らそうとすることはありません。 – millimoose

+0

最初に、コメントをいただきありがとうございます。BlogManagerは "new Blog()"を呼びますか? – johnnietheblack

答えて

4

私は専門家ではありませんが、私はこれを解読します。これは、Blogが、一部のデータのコンテナとして機能し、コントローラによって塗りつぶされるデータモデルオブジェクトであることを前提としています(new Blogはあまり意味がありません)。この場合、Blogはオブジェクトグラフの葉であり、newを使用しても問題ありません。 Blogを作成する必要のあるメソッドをテストする場合は、とにかにBlogの作成を同時にテストする必要があり、モックオブジェクトを使用することは意味がありません。Blogはこのメソッドを過ぎても持続しません。

たとえば、PHPに配列構造がなく、コレクションオブジェクトがあるとします。 $this->collectionsFactory->create()に電話するか、new Array;と言ってもよろしいですか?

+0

葉の説明で啓発してください(http://chat.stackoverflow.com/rooms/7294/discussion-between-johnnietheblack-and-inerdial) – johnnietheblack

+1

Tanduは、上記のように追加しましたが、このシナリオではメリットがないかもしれませんが、工場でメリットが得られるシナリオがあります。そのような場合は、工場で「新規」を使用するのか、それとも何か他のことをしますか? – johnnietheblack

関連する問題