2013年01月23日

共通部分でなくとも抽象化

読みやすいコードってどんなものか考えてみた -抽象化と名前重要- - 馬鹿と天才は紙一重読んでその2。その1はRubyの「範囲」は分かりづらいを。

"共通部分でなくとも抽象化"項の補足。

共通部分(コード中で繰り返し出てくる記述)でなくても抽象化すべき例として、件の記事ではneed_to_pay_postageメソッドを例として挙げている。

Product.where(:price => 0..5)

このコードでは"productモデルの中で、priceカラムの値が0から5までを取得している"という「処理」は分かっても、それが何を「意図」しているのかは読み取れない。だから以下のようにして「意図」が読み取れるようにしましょうと。

class Product < ActiveRecord::Base
  scope :need_to_pay_postage, lambda {
	where(:price => 0..5)
  }
end

「別にコメント書いとけば良くね?」とも言われそうだけれど、そうでも無いよなぁと。

仕様変更なんていくらでも起こりうる事で、今は「5ドル以下の物には一律送料がかかる」だったとしても、将来それが別の条件に変わる事も有り得るわけで。先日Amazonが仕様を変えたのは記憶に新しいところ。その仕様だって、最初からそうだった訳ではないのだしね。

このコードだって、将来、shim0muraさんが書いているような"書籍については10ドル以下の商品が、また衣類については30ドル以下の商品が送料がかかり、それら以外のカテゴリの商品で5ドル以下のものであれば送料がかかる"なんて複雑な仕様へ変更される可能性はいくらでも有る。その為にも抽象化はしておくべきなのだろうなと思う。変更が必要な部分を探すのも容易になるし、その影響が及ぶ範囲を必要最低限にする事も出来る訳だ。

ラベル:Technique
posted by 天井冴太 at 01:47| Comment(0) | TrackBack(0) | Other | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック