2013-05-03

railsのモデルを分割する。ついでにspecも。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsを利用していると、どうしてもメインに利用するモデルが大きくなってしまいます。

でモデルを分割する方法です。

調べてみたところ以下の2つの方法があるようです。

 ・クラス拡張(オープンクラス)を利用
  以下が参考になります。
  http://morizyun.github.io/blog/concerned-with-many-model/
 ・モジュールを利用
 以下が参考になります。
 http://qiita.com/items/f2ae316dc8e98b4ff82a
 http://qiita.com/items/e8733784402636c9b1fc

具体的な方法をそれぞれ参照先を見てください。

どちらが主流なのかは、よくわからなかったのですが、私はクラス拡張の方を利用しました。

クラス拡張の方が大きくなったモデル分割するには変更が若干少なくて済みそうな気がするというのが理由です。

最初からモデルが大きくなることを見越しているならばモジュールを使ったほうがよさそうな気もします。

そして、そんな大きくなってしまったモデルのspecは輪をかけて大きくなっていると思います。
こちらの分割方法は以下のような感じです。

spec/model/order_spec.rb
を分割するとします。

以下のような感じで分割するファイルを格納するディレクトリとファイルを作成します。

mkdir spec/models/order
vi spec/models/order/validate_spec.rb

作成したファイルに、普通にspecを書けばOKです。

rake spec
を実行すると、作成したディレクトリの下の*_spec.rbも勝手に発見してくれます。

分割、方法はモデルの分割とあわせてもよいと思いますし、特に肥大化しているメソッドのテストだけ切り出すとかでもよいかもしれないです。


コメントを投稿