Ruby on Rails モデル肥大化対策
開発してるシステムのモデルがもうカオス状態になってる。
どうカオスなのかというと以下のような状態。
- 1つのモデルにとにかく何でも関連するメソッドを詰め込んでいる
- メソッドの役割が単一でないため、コードを読んでも挙動が把握しづらい
- メソッドの役割が単一でないため、修正したときの影響が広すぎる
とにかく変更したいときにとてもつらい設計になっている。どこに影響を及ぼすのかを把握するためにfind grepした結果をすべて目で洗い出さないといけない。
勉強中のRuby on Railsではどうやってモデル肥大化を防ぐか調べてみた。
この記事がとても参考になる。
肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳) | TechRacho
常に考えなくてはならない原則は「単一責任の原則」だそうだ。1つのモデルに対して1つの責任をもたせるようにする。
これをどうやって仕事で使っているシステムに実現するかは以下の記事が参考になる。
Rubyist Magazine - Ruby on Rails: The Bad Parts
機能のまとまりをモジュールとして分割して、インクルードしてやるのがいいみたい。
確かにこれならどこにどんな機能がまとまっているのかがわかるし、テストもしやすそう。懸念はコードがさらに分散することになるため、コードを追うのが大変そう。でもモジュールの名前と機能がしっかりと対応していればモジュールの中身をみなくても問題なくなるのかな。
いろいろ調べたけど、まだ腹落ちしていない気はする。実装してみて、修正してみないと本当の意味で効果を実感できないかも。実際に同じような状況で、リファクタリングして保守性を上げたソースコードを見てみたいな~