ビデオが正しいです。コードの一部にnew
がある場合はいつでも、テストするのが難しくなります。基本的には、テストしているものをそのクラスから分離する方法はありません。これは、あなたのユニットテストが実際に信頼できるものであるためには、そのクラス(あなたのnew
ステートメントにあったもの)を十分にカバーする必要があることを意味します。
すべてのインスタンスを(クラスまたはメソッドのいずれかの)依存関係として渡すのが最も良いオプションですが、通常は特定のレイヤーでのみ機能します。たとえば、正しく書かれていれば、コントローラーをすべてnew
ステートメントから取り除くことは非常に簡単です。コンストラクタ内の依存関係としてサービスを渡すだけで、Request
アブストラクションまたは明示的な値を "アクションコール"に渡します。
したがって、(おそらくいくつかのDIコンテナを使用して)依存関係を渡すことが最良の方法です。テストするのが最も簡単です。しかし、これは普遍的に利用可能ではありません。
残りのコードは、おそらくnew
演算子と工場の組み合わせで(少なくとも部分的に)終了します。
あなたは工場で::class
を使用してのDocblockコメントを追加することの両方によって、IDE関連の問題を軽減することができます。
/** @var \Mapper\SalesSomething\Invoice $invoice */
$invoice = $this->factory->create(Invoice::class);
私の個人的な好みは、次のとおりです。
- コントローラ:のみを経由して、依存関係などの関連オブジェクトDIC
- サービス:マッパーのための工場、依存関係のあるリポジトリ、ドメインエンティティ
new
- マッパーは:工場
経由しかし、それはちょうど私のアプローチ
です:DIC経由でのみ依存関係として
プレゼンテーションオブジェクト/ウィジェットを関連オブジェクト:依存関係のない
ビュー:唯一のコンストラクタに
エンティティの依存関係します
そのビデオの長さは50分以上です。 **なぜ彼らは 'new'キーワードが悪いと思うのですか**要約できますか? – rickdenhaan
TL; DR:指定されたクラス名と緊密に結合し、テストするのが非常に難しい –