私は、依存性注入を使用したテスト可能な設計と、単純な固定パブリックAPIの提供とのバランスを取る方法を検討してきました。私のジレンマは次のとおりです。人々はvar server = new Server(){ ... }
多くの依存関係や依存関係のグラフを作成することについて心配する必要はなく、何かをしたいと思うでしょうServer(,,,,,,)
。開発中は、IoC / DIフレームワークを使用してすべてを処理するため、あまり心配する必要はありません(コンテナのライフサイクル管理の側面を使用していないため、さらに複雑になります)。
現在、依存関係が再実装されることはほとんどありません。この場合のコンポーネント化は、拡張などの継ぎ目を作成するのではなく、ほとんど純粋にテスト容易性(および適切な設計!)のためです。99.999%の人は、デフォルト構成を使用したいと思うでしょう。そう。依存関係をハードコーディングできました。それをしたくない、テストを失う!ハードコードされた依存関係と依存関係を取得するデフォルトのコンストラクターを提供できます。それは...乱雑で、混乱を招く可能性がありますが、実行可能です。依存関係を受け取るコンストラクタを内部に作成し、ユニットテストでフレンドアセンブリ(C#を想定)を作成できます。これにより、パブリックAPIは整頓されますが、メンテナンスのために厄介な隠されたトラップが残ります。私の本では、明示的にではなく暗黙的に接続された2つのコンストラクターが一般的に悪い設計になります。
現時点では、私が考えることができる最小の悪についてです。ご意見?知恵?