Rails で処理を別クラスに切り出す方法についての意見募集スレ


#1

Railsで処理を別クラスに切り出す方法について - メドピア開発者ブログ に、自分なりのPOROへの切り出し方を書きました。

しかしこのやり方が絶対とは思っていません。いろんなアプローチがあると思うので、賛成、反対、「自分はこう書いてる」などの意見がいただけると嬉しいです(\( ⁰⊖⁰)/)!


#2

ブログで言及いただいたのでとりいそぎURLだけ貼っておきます。返信は後で

「モデルの中からPOROを呼び出すのはどの程度認められるのか」気になります - 島までは遠い


#3

めっちゃ遅れたけど返信します。

今回のサンプルコードはあくまでPOROの切り出し方を紹介したかったのでモデルのメソッドを切り出す例としましたが、実際の現場では、ms2satoさんの書いたサンプルコードのようにコントローラから呼び出す形式にすると思います。

そもそもコールバック使うのどうなの?など議論の余地があるコードですが、そこまで考え出すとこのエントリで取り上げる範囲が広がりすぎてしまうためそのあたりは無視してください

と書いたように、コントローラから呼び出す形式にすると説明内容が増えそうだなーと思ってモデルから切り出す形にしたのでした。

モデルの中からPOROを呼び出すのはどの程度認められるのか

個人的には「モデルからPOROを呼び出しても問題ないのでは?」派です。どういうときにPOROを使えて、どういうときには使ってはいけないというルールはないのではないでしょうか。クラス(ドメインモデル)として切り出せるまとまった単位の処理があればどんどん切り出せるのでは。

ただし、RailsアプリケーションなどではユースケースごとにPOROを作っていくことが多いので、結果として(ms2satoさんの書いたサンプルコードのように)コントローラからPOROを呼び出し、POROからモデルを呼び出す形式が多くなるのではないかな、と思います。


#4

@willnet さん、お忙しい中お返事いただきありがとうございます。

そうでしたか。この点は私の考え過ぎなのかもしれませんね。ひょっとするとRailsのモデルの位置付けの哲学の違いかと感じました。モデルの位置付けが私のイメージよりも上位の層に位置しているような感覚を得ています。そして本来のModelという言葉の意味では @willnet さんのイメージでマッチしているとも思います。

私は恐らくActiveRecordがもう少し永続化層に近いと捉えていて、差し替えやすくしたいのかもしれません。その為にやり過ぎない程度に下の層に置いておきたいイメージです。

元々はこのことに悩んで現在の結論に辿り着いていますが、今後はもう少し緩く考えてみるのも良いと気持ちを新たにしました。今回のことをきっかけに他の場所でも会話する機会があり、人によりこの点について観点が様々なことも良い勉強になりました。
良いきっかけをいただきありがとうございました。