TL;DR
システムの構成要素どうしが弱く結びつき、互いのことをほとんど知らない状態。一方の変更が他方に与える影響が小さい。反対は密結合である。
なぜ必要か
Wikipedia によると、疎結合なシステムでは、ある構成要素の変更が他の構成要素の存在や性能にほとんど影響しない。同じサービスを提供する別の実装に差し替えやすく、特定のプラットフォームや言語、OS にも縛られにくい。
仕組み
結合とは、ある構成要素が別の構成要素について直接持っている知識の度合いである。プログラミングでは、依存する側が具体的なクラスではなくインタフェースだけを参照すると疎結合になる。インタフェースを実装したクラスなら、どれでも差し替えられる。
ほかにも、JSON や XML のような標準の形式でデータを公開する、顧客 ID のような最小限のデータだけを渡す、メッセージキューで非同期に通信する、イベント駆動のアーキテクチャにする、といった方法がある。
注意点
時間的に切り離すと、トランザクションの整合性を保つのが難しくなり、調整のためのプロトコルが別に必要になる。作り込みすぎた ESB のような仲介の仕組みは、かえって密結合と、アーキテクチャ上の集中点を生むことがある。