2013年8月16日金曜日

モジュールの結合


結合の基準
サイズ=モジュール間結合の数
サイズは小さければ小さいほど良い。
・引数が1つのルーチンは引数が6つのルーチンより結合が弱い(サイズが小さい)
・4個のpublicメソッドからなるクラスは37個のpublicメソッドからなるクラスより結合は弱い

結合の可視化
・引数による結合は、グローバル変数による結合より明示的なので良い

結合の柔軟性
・モジュール間の結合が容易に帰られるほど柔軟性が高い
var employee = {'雇用日': , '職種': , ....};
に対して、雇用日と職種から休日を算出する関数は
function lookupVacationBenefit ( employee) { ... }
とするよりも、
function lookupVacationBenefit ( 雇用日, 職種 ) { ... }
にしたほうが、他のモジュールからも扱いやすくなる。
(過剰な情報伝達が悪になる例でもある)

結合の種類
○単純パラメータ結合
○単純オブジェクト結合
△オブジェクトパラメータ結合
×セマンティック結合


情報の隠蔽と変更の影響の最小化

指針
・情報を隠蔽し、内部構造は必要がなければ考えないで済むようにする
・変更が発生したときに、その影響を一カ所にとどめるようにする


具体的なプラクティス

・ユーザーとのやり取りをするコードを一カ所に集中させる
・マジックナンバーのハードコーディングは避け、定数として一カ所で定義する

・グローバル変数を避ける(必要以上のデータを渡さない)
・循環依存(AからBを参照し、BからもAを参照する)をしない
・変更されそうな部分を予測して、分離する
・状態変数としてブール型ではなく、列挙型を使う
・状態変数は直接参照せずに、アクセスルーチンを使い抽象化する
・他のモジュールへの依存度を減らし、疎結合(弱い結合)にする