(この記事は、thoughtbot Learn を使って学んでいることのアウトプット用です)
###結合度(Coupling, カップリング)と呼ばれる概念があります。
あるコードと別のコードの「結合度が高い」「結合度が低い」といった言い方をします。それらコードを評価する基準の一つです。
###結合度が「高い」コードは良くないものとされています。
結合度が高いことが、なぜコードに悪影響を与えるのか、例を挙げながら説明します。
最も結合度が高いものから、最も低いものまでを列挙して説明します。
##内容結合
あるクラスが、別のクラスの内部変数にアクセスして、それを書き換えています。別のクラスなのにも関わらず、片方のクラスを書き換えることで、もう一方のクラスも変更しなければいけません。
class NuclerLaunchController
def initialize(launch_codes)
@launch_codes = launch_codes
end
end
class ExtremelyBadIdea
def initialize(nucler_launch_controller)
@launch_controller = nucler_launch_controller
end
def do_bad_things
@launch_controller.instance_variable_set(:@launch_codes, 'password')
end
end
##制御結合/コントロールカップル
渡すコードによって、内部の挙動が変わる結合です。
### Railsより出典
def save(should_run_validations=true)
if should_run_validations
run_validations
persist
else
persist
end
end
##結合度が低いが、まだ結合がある例
class ScreenPrinter
def print(text)
output_to_screen(text.to_s)
end
end
このメソッドを使う側は、渡すパラメータが何の種類であるべきか考えなければいけません。
##結合度が考えうる限り低い例
###メッセージカップリング
class ScreenPrinter
def print_to_screen
output_to_screen(@text)
end
end
引数をとっていないので、コードを使う側はメソッドの名前さえしっていれば良い状態です。