私はあなたがそれに何らかのハードデータを持っているのではないかと疑います。
まず、DI(または他のSOLIDの原則)を使用しないでください。これは、TDDを行うのに役立ちます。それ以外の方法では、TDDを使用します。これはデザインに役立ちます。通常は、そのような原則に従うコードを取得することを意味します。
なぜインターフェイスを使用するのかについては、別の問題です。https://stackoverflow.com/questions/667139/what-is-the-purpose-of-interfacesを参照してください。
あなたのクラスでさまざまなことを行うと、面倒なコードが発生することに同意したと思います。したがって、私はあなたが既にSRPに行くと仮定しています。
特定のことを行うクラスが異なるため、関連付ける方法が必要です。それらをクラス(つまりコンストラクタ)の内部に関連付けると、クラスの特定のバージョンを使用するコードがたくさん得られます。つまり、システムを変更するのは難しいでしょう。
システムを変更する必要があります。ソフトウェア開発の事実です。特定の追加機能を追加しないことについてYAGNIに電話することはできますが、システムを変更する必要はありません。私の場合、週刊スプリントを行うのと同じように、それは本当に重要なことです。
設定はコードで行われるDIフレームワークを使用します。本当に小さなコード構成では、たくさんの異なる関係を繋ぎます。だから、インターフェースとコンクリートのクラスについてのディスカッションを取り除くと、実際にはタイプミスを減らすことができます。また、具体的なクラスがコンストラクタ上にある場合、それはそれを自動的にフックします(私は構成する必要はありません)残りの関係を構築します。また、私はいくつかのオブジェクトの寿命を制御することができます、特に私はオブジェクトをシングルトンに構成することができ、それは常に1つのインスタンスを手渡します。
また、これらの方法を使用するだけでオーバーヘッドが増えるわけではありません。最初の時間にそれらを使用すると、オーバヘッドの原因は何か(学習プロセス+場合によってはマインドセットの変更のため)です。
ボトムライン:すべてのコンストラクターコールをすばやく実行する必要はありません。