Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | データの再編成 | 自己カプセル化フィールド

内容

リファクタリング

自己カプセル化フィールド

適用ケース要約

フィールドに直接アクセスしているが、フィールドとの密結合が不都合になってきている

適用内容要約

フィールドのゲッター/セッターを作り、フィールドにアクセスするときにはそれらだけを使う

適用詳細

クラス内部でフィールドにアクセスする際にgetter、setterを利用すること。
※getter、setterを外部から使用する話とは違うので注意

サンプル

あるクラスに、2つのフィールドがあり、初期化の際にそれぞれに数値を設定します。
合計を求めるメソッドを呼び出すと2つのフィールドに設定した合計値が返却される機能を実装します。

サンプルコード

リファクタリング

class EncapsulationBefore
  attr_accessor:hoge,:hoo
  
  def initialize(hoge,hoo)
    @hoge=hoge
    @hoo=hoo
  end
  
  def calculate()
    return @hoge+@hoo
  end
end

p EncapsulationBefore.new(5,10).calculate

リファクタリング

class EncapsulationBefore
  attr_reader:hoge,:hoo
  
  def initialize(hoge,hoo)
    @hoge=hoge
    @hoo=hoo
  end
  
  def calculate()
    return hoge+hoo
  end
end

p EncapsulationBefore.new(5,10).calculate


出力(共通)

15
解説

Rubyでの実装であるため、フィールドへの読み書きを許すattr_accessorから
参照のみを許すattr_readerになっていますが、Javaの場合は
フィールドをprivateに変更し、getter・setterを利用して読み書きすることになります。