インターフェースの必要性、ユニークなプロジェクトでの注入

StackOverflow https://stackoverflow.com/questions/615885

  •  03-07-2019
  •  | 
  •  

質問

他の人が再利用またはアップグレードする機会がほとんどないサイトにインターフェイスと依存性注入を実装する必要があるのはなぜですか?

役に立ちましたか?

解決

コンピューターのプログラミング方法を学んだとき、あなたは自分のクラフトの一種の「筋肉の記憶」を開発していました。長年にわたって、あなたは同じ考え方でプログラミングを続けます。ほとんどの人は最初から気の利いたOOP原則のすべてを学んでいないので、学んだ方法よりも努力しているように見えます。

OOP言語を使用している場合は常に、OOP設計手法を使用する習慣を身に付ける必要があります。これにより、全体的に優れた開発者になるからです。あなたの目標は、これらのテクニックを使用するために、プログラミングの筋肉の記憶を再訓練することです。そうすれば、これらの質問をする必要はなく、テクニックがプログラミングの何らかの形で「邪魔をしている」と仮定する必要はありません。そのようにプログラムするだけのプログラマになります。

他のヒント

多くの場合、単体テストがかなり簡単になります。たとえば、データベースに接続する別のタイプを使用するタイプがある場合があります。最初のタイプのユニットテストでは、2番目のタイプの代わりにテストモックを挿入して、2番目のタイプを介してデータベースに間接的に接続することなく、1番目のタイプを効果的に単体テストできます。

なぜですか?

インターフェイスとインジェクションは、再利用またはアップグレードに関するものではないと思います。

個人的には、すべてのプロジェクトにインターフェースとDIを使用しています。それらを避けることで利益を得るのに十分なオーバーヘッドではありません。

あなたがしているという仮定は、Y2Kをもたらしたのと同じ仮定だからです。

これにより、今まで考えていなかった方法でコードを再利用しやすくなります。 また、ソースコードを変更せずにコードの動作を簡単に変更できます。

依存性注入に Spring.NET を使用しています。

DoWork()関数を持つMachineクラスがあるとしましょう。次に、IWorkAlgorithmインターフェイスを作成し、各マシンに特定のアルゴリズムを実装します。

Machineの各インスタンスにはIWorkAlgorithmが注入され、Machine.DoWork()は注入された実装を呼び出します。

次の利点があります。

  1. XMLファイルを編集するだけで、新しい実装にスワップできます。
  2. XMLファイルを編集して、各実装のプロパティ(タイムアウト、制限など)を変更できます。
  3. Machineクラスの外部で実装を再利用できます。

オブジェクト指向プログラミングを行っている場合、コードを確認する開発者が1人だけであっても、ユニットテストを行う必要があり、依存性注入を使用しないと複雑になります。

「他の開発者」があなたのソフトウェアで非常にうまくあなたになれます。動作する高度に結合された相互依存のコードをまとめてハッキングし、作業中にそれを理解することもできますが、プロジェクトから離れると、数日間でも開始できます糸の玉がほどけるのを妨げていたすべてのささいなことを忘れる。

あなたがそれに戻ったとき(そして、私はまだいくつかの変更を必要としないソフトウェアをまだ見ていません)、あなたはあなたがすべてのベストプラクティスに従ったことを望むでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top