ゆるふわ技術日誌

名前に反してビシバシやっていこう

RailsにServiceを #296

Rails完全に飽きて来た。(書けるって言っているわけではない)

RailsでService

qiita.com

こんな記事とか

techracho.bpsinc.jp

こんな記事でも触れられているように、複数のモデルをまたぐロジックとかをServiceに切り出すとモデルが短くなっていいよね、というのはもはやRails書く人たちにとっても共通認識になっているようで。

今書いているアプリ?で2つのActiveRecordモデルから日付順で取得してきたデータをマージしてソートする必要が出てきて、「今だ!」と思ってやってみた。

処理の内容的には大したことないので、moduleで以下のような感じで実装した。app/servicesの下に置いた。

module ArticleListService
  def article_list(article_count = nil)
    # いろいろやってリストを返す処理
  end

  module_function :article_list
end

(リストを返す処理が思いっきり初歩的なミスでバグってたので中身は省略)

んで、使う側は

class WelcomeController < ApplicationController
  include ArticleListService

  def index
    @articles = article_list(5)
  end
end

こんな感じ。

↑で紹介した記事なんかはClass使って実装してたので、規模がでかくなって来たらその方が良さそうですね。

雑談

ServiceってDDDの思想だったよなぁって。夏にDDD使ってインターンしてたんだけど、結局実際に使うことなくここまで来てしまってたと反省。

DDD本も買ったはいいけど最後まで読んでないし、中途半端になってること片っ端から片付けて圧倒的成長したいで。せっかく時間を作ったわけだし。