私がTDDをやっているとき、それはDependency Injectionの原則を採用することを余儀なくされ、私は疎結合コードになります。TDD以外の疎結合コードには他にも利点がありますか?
疎結合コードを持つアプリケーションを理解することは難しいと言われました。
疎結合コードの長所と短所を教えてください。
私がTDDをやっているとき、それはDependency Injectionの原則を採用することを余儀なくされ、私は疎結合コードになります。TDD以外の疎結合コードには他にも利点がありますか?
疎結合コードを持つアプリケーションを理解することは難しいと言われました。
疎結合コードの長所と短所を教えてください。
依存性注入が自動的に低結合につながるわけではありません。私は低結合の賛辞について上記の答えに同意します。 Dependency Injectionの主な利点は、テスト容易性が向上し、インプリメンテーションではなくプログラムのGoFの原則に従うのに役立つことです。しかし、注入された依存性に対しても高い結合性を持つことができます。
複数の実装がある場合、コンポーネントをより簡単に置き換えることができるという利点もあります。
ショッピングカートシステムがあるとします。これは、通常、データベースに格納され、データベースから読み取ります。これがデフォルトです。しかし、バックエンドを使用するように注入することはできますが、これはあまりうまくいかないが、データベースを持たない場合には機能します。
疎結合であるため、非常に変更が可能です。それは全体のポイントです。あなたがそれを必要としないならば、疎結合はより多くの「深さ」を持つシステムをもたらす多くの迂回を導入するかもしれません:起こる全てを見るためにレベルを見る必要があります。
最も大きな利点は、1つのモジュールに変更を加えても、他のモジュールが予測できないほど損なわれないことです。
あなたが言ったように、緩やかに結合されたコードの問題は複雑さが増し、理解するのが難しいです。コードが疎結合しているときにコードが何をするのかはすぐには分かりません。
他の人の言いましたように:利点は、コード/モジュール/オブジェクト/コンポーネントが互いに依存していない場合、他の部分を交換するほうがずっと簡単だということです。
すべてのオブジェクト指向設計と同じように、トレードオフが必要です。モジュール式のコードを入れ替えるのがより重要ですか?あるいは、理解しやすいコードを簡単に作ることが重要ですか?それを決める必要があります。
再利用、拡張性、および副作用の軽減。