密結合と疎結合

3回前の記事で書いたアプリケーションの境界の続きで、
今回はアプリケーションの密結合と疎結合について考えます。

密結合は、異なるアプリケーションが密接に結びついている状態のことです。
つまり接続先のアプリケーションが停止してしまうと、
接続元のアプリケーションも停止してしまう状態のことです。
技術的には、RPC, リモーティング, DCOM, Webサービスなどにあたります。
接続先アプリケーションのデータベースに直接接続して、
クエリを発行するのも広い意味では密結合になります。

それに対して疎結合は、異なるアプリケーションがゆるやかに結びついている状態のことを指します。
こちらは接続先のアプリケーションの状態に依存せずに、
接続元のアプリケーションが処理を行うことができる状態のことです。
技術的には、キュー、DBのレプリケーションバッチ処理による連携などを使って疎結合を実現できます。
Floppy Diskや手動の入力などでアプリケーション間のデータを移動するのも広い意味では疎結合です。
たまに、雑誌の記事などで『Webサービスを使う=疎結合である』といった記述がみられますが、
これは誤りです。単純にWebサービスを使うだけでは、同期連携(密結合)となってしまいます。

アプリケーション間の連携では、この疎結合が基本になります。
設計を行っている方は、アプリケーション間連携(既存システムとの連携、といった方がわかりやすいかな?)
ついつい、DBがそこにあるので直接接続してクエリ発行...とやりがちですが
そこで一歩立ち止まって、果たしてそれでよいのか考えてみてください。
密結合の恐ろしいところは、開発/リリース段階では特に問題とならないところです。
運用段階に入って、アプリケーションを止められない...止められないからメンテナンスもできない...
といった様々な問題が発生します。
それともちろん疎結合も良い所ばかりではなく、パフォーマンスとのトレードオフになりますので、
パフォーマンスの要求を満たしつつ、どこまで疎結合を実現できるかが設計の鍵となります。

また、もうひとつ問題なのは、そもそもアプリケーションの境界があいまいなことです。
ネットワーク構成図を見ただけでは、データベースサーバ、Webサーバといった
サーバの単位しかわからないためアプリケーションの境界はわかりません。

次回では、アプリケーションの境界についてもうちょっと深く考えてみます。

#たまには技術ネタも書きますね。
#技術ネタじゃないとアクセスが少ないのが悲しいところです...(^^;;