2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

結合度(カップリング)に焦点をあてたリファクタリング

Posted at

(この記事は、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

引数をとっていないので、コードを使う側はメソッドの名前さえしっていれば良い状態です。

参考
http://ja.wikipedia.org/wiki/%E7%B5%90%E5%90%88%E5%BA%A6

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?