他の人が再利用したりアップグレードしたりする機会がほとんどないサイトに、インターフェイスと依存性注入を実装する必要があるのはなぜですか?
6 に答える
多くの場合、単体テストが非常に簡単になります。たとえば、データベースに接続する別のタイプを使用するタイプがあるとします。最初のタイプの単体テストでは、2番目のタイプの代わりにテストモックを挿入できます。これにより、2番目のタイプを介してデータベースに間接的に接続することなく、最初のタイプを効果的に単体テストできます。
コンピューターのプログラミング方法を学んだとき、あなたは自分の工芸品の一種の「筋肉の記憶」を開発していました。何年にもわたって、あなたは同じ考え方でプログラムを続けます。ほとんどの人は、最初から気の利いたOOPの原則をすべて学んでいるわけではないので、学んだ方法よりも努力しているように見えます。
OOP言語を使用しているときはいつでも、OOP設計手法を使用する習慣を身に付ける必要があります。そうすることで、全体的に優れた開発者になるからです。あなたの目標は、それらの技術を使用するためにプログラミングのあなたの筋肉の記憶を再訓練することであるべきです。そうすれば、これらの質問をする必要はなく、テクニックがプログラミングの「邪魔になる」と想定する必要はありません。あなたはそのようにプログラムするだけのプログラマーになります。
なぜ、確かに?
インターフェイスとインジェクションは、再利用やアップグレードだけではないと思います。
個人的には、すべてのプロジェクトでインターフェイスとDIを使用しています。それらを回避することを利益にするのに十分なオーバーヘッドではありません。
あなたがしている仮定はY2Kをもたらしたのと同じ仮定だからです。
これまで考えもしなかった方法でコードを再利用するのがはるかに簡単になることがわかりました。また、ソース コードを変更せずにコードの動作を簡単に変更できます。
依存性注入にSpring.NETを使用しています。
DoWork() 関数を持つ Machine クラスがあるとします。次に、マシンごとに特定のアルゴリズムを実装して、IWorkAlgorithm インターフェイスを作成します。
Machine の各インスタンスには IWorkAlgorithm が注入されており、Machine.DoWork() は注入された実装を呼び出します。
これで、次の利点が得られます。
- XML ファイルを編集するだけで、新しい実装に切り替えることができます。
- XML ファイルを編集して、各実装のプロパティ (タイムアウト、制限など) を変更できます。
- Machine クラスの外で実装を再利用できます。
オブジェクト指向プログラミングを行っている場合、コードを確認する唯一の開発者であっても、単体テストを行う必要があり、依存性注入を使用しないと複雑になります。
あなたのソフトウェアの「他の開発者」があなたである可能性が非常に高いことを忘れないでください。機能する高度に結合され相互に依存する大量のコードをハックして、作業中に理解することさえできますが、プロジェクトから離れた瞬間、たとえ数日であっても、毛糸の玉が解けないようにしていたささいなことをすべて忘れるために。
戻ってきたとき (そして、将来的に何らかの変更を必要としないソフトウェアをまだ見たことがありません)、すべてのベスト プラクティスに従っていればよかったと思うでしょう。