2012-03-09 6 views
1

可能な限りテスト可能なコードを作成しようとしています。つまり、依存関係注入を正しく使用することを意味します。依存関係注入のコンストラクタでサービスとリーフオブジェクトを混在させるか?

私は、そのオブジェクトmeets certain criteriaの場合、new()を使ってオブジェクトをインスタンス化しても構いません。注目すべきは、コンストラクタで "新しくできない"ものを受け入れるべきではないということです。私のDIコンテナは、前もって「サインアップ」フォームを作成する方法を知っているだろう方法はありませんので

は例えば、私は

new Form('signup'); 

を行くことができるはずです。

私はこの仕事にほとんどの時間を作ることができますが、今はフォームのように、サードパーティ製のバリデータを使用して、自分自身を検証できるようにしたいと思います:

$form->validate()->isValid(); 

...ということを意味しています私はバリデーターサービスを渡す必要があります。

ほとんどの場合、フォームが検証される必要があるため、バリデーターを別に用意しなければならないので、バリデーターはすでに含まれています。

は、それが行うには、この例では、大丈夫です:

new Form(Validator $validator,$name); 

答えて

1

私はオブジェクトが有効な状態であるために必要となる任意の値またはオブジェクトがそのオブジェクトの依存関係の1つであることを言うだろう。あなたの例では、フォームの名前を完全に有効に含むでしょう。私は依存関係の型が注入されるべきかどうかを言うのに使われるとは思わない - Martin Fowler in this articleは、例えば文字列を注入したオブジェクトを示し、DIコンテナは通常文字列値を供給するように設定できる。

この点を念頭に置いて、バリデーターと文字列を注入するのは、私の意見では問題ないと思います。

関連する問題