misc.log

日常茶飯事とお仕事と

システムにおける疎結合と密結合を下手なたとえで説明する

疎結合(そけつごう)、密結合(みつけつごう)という言葉を初めて聞いたのはもう15年ほど前の話でしょうか。関数間の呼出などにおいて、なるべく互いの関係を「薄く」することにより、将来の拡張などに備えるというものでした。たしか。VBマガジンあたりでもよくTip的に書かれていたように思います。

ソフトウェアシステムにおける結合というのは、プログラム内部だけではなく、プログラム間、システム間でも発生します。それがあるから「結合テスト」なんて言葉が使われますよね。

で、その「結合」もよく考えて設計しないと、将来の修正や変更、機能追加で余計なコストが発生することになります。実際、今回私が担当して機能追加する部分でこんな事態が発生しました。

以下は、その状況を家電にたとえた例えです。

  1. 新築の家を買った。
  2. 5年後、洗濯機を新調した。
  3. 届いた洗濯機の電源プラグをコンセントに刺した……
  4. 「このコンセントは洗濯機型番および購入年月日を事前にコンセント管理機に登録しなければ使えません」

アホか。さらに

「洗濯機の電源部分に自宅住所を登録しなければコンセント管理機に登録できません。メーカーに依頼して登録をお願いします」

みたいなことになってる……って状況がただいま目の前で発生中。

家の電気関係の仕様と互換性/拡張性

ちなみに、家電製品等における電源プラグに関する仕様は、以下の部分で構成されているとおもいます(ざっくりですよ)。さすが、長年耐え抜いてきた規格や仕様だけあって、よく考えられています。

  1. 電源プラグの形状
  2. コンセントの形状
  3. 流れる電流および電圧
  4. 交流電源の周波数(50とか60ってあれ)

まず、「電源プラグの形状」、これは国内においては統一されていますよね。そして、上記3の「電流および電圧」が違うもの、要するに互換させてはいけないものは形状を変えることで誤接続を防止しています。よくわからない人は、自宅の大きめの部屋に設置されているエアコンのコンセントを見てもらうと、変な形のものがあるとおもいます。あれです。つなぐべきモノ、だめなモノを使い手が意識せずとも「適切に使えなくする」ことで、使い手はルールを覚える必要がありません。

電流および電圧については、一般家庭用のものは基本的に100Vに統一されています。電流については、その家に来ている電気全体の量を考える必要があることから、電力会社との契約と、配電盤周りの改修で拡張可能になっています。また、電圧は国によって違います。なので、接続する機械の側で違う電圧に切り替え可能になっているものもあります。パソコンの電源などがそうです。パソコン(デスクトップパソコン)の裏側、電源ケーブルがつながる部分に「115V」と「230V」とか書いてあるスライドスイッチがあれば、それが切替スイッチです。これについては国内で切り替えることはほとんど無いでしょう。

交流電源の周波数も、最近は機械側が自動判定して切り替えてくれるものが多いのでは無いでしょうか。かつては東日本用と西日本用で機械が違ったようですが。

てな風に、電源に関しては共通ルールを決めながらも、接続する機材側、接続される環境側それぞれはそれなりに拡張性や切替を意識した仕組みが用意されています。切替はつなぐ/つながれるの片側だけですむ場合がほとんどです。なので、上記のような「洗濯機を買ったけど家に登録しないと使えない」的なことは通常ありません。

互換性や拡張性をあえて殺すケース

では、全部がこういう風になるべきか、というと、あえて「つながらなくする」場面があります。セキュリティ的な観点で接続を制限したい場合です。一番わかりやすいのが「家の鍵」ですね。これは、鍵を持っている側と、家の扉の間で「同じ形の鍵と鍵穴」という取り決めが事前に成立しているため、誰でも開けるということは出来なくなっています。

このように、設計をする際にはある程度「将来片方が変わった場合」や「そのときには無かったものがつながる」ことが「必要かどうか」、それから、必要であれば「拡張しやすいように」することが好ましいです。で、その手法の1つとして「つなぐ/つながれるモノの間の取り決めを極力少なくする」=「疎結合にする」という手段があります。

その辺、もうちょっと考えてちょーだい。まじで。