0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

サービスクラスを利用するには

Posted at

・サービスクラスとは
コントローラー内のコードの可読性を高めるために用いる概念で、モデルとは別に処理を記述するファイルのこと。

・サービスクラスを使用する目的
モデルの記述は肥大化しやすいため、複雑な処理はサービスクラスに切り出すことで可読性を保つことができる。

・サービスクラスの使用方法
例えばすでに下記のようにモデル内に記述している処理をサービスクラスに切り出そうとするときを例にあげて説明する。

ruby app/models/モデル名.rb
class モデル名 < ApplicationRecord
 validates :text, presence: true
  belongs_to :user
  has_many :comments

  def self.search(search)
    if search != ""
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end
end

1.サービスクラスを定義する
まずは以下のような配置になるように必要なディレクトリとファイルを作成する。

app
 L sevices
     L search_tweets_service.rb # 好きな名前

2.作成したファイルに処理を記述する

ruby search_tweets_service.rb
class SearchTweetsService
  def self.search(search)
    if search != ""
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end
end

SearchTweetsServiceというクラスを定義した後は、すでにモデルに記述していた処理をそのまま書くだけで終わり。

3.コントローラーで呼び出し

ruby controllers/コントローラー名.rb
class コントローラー名 < ApplicationController
~省略~

  def search
    @tweets = SearchTweetsService.search(params[:keyword])
  end

~省略~
end

モデルに書いていた時の呼び出しは以下

ruby コントローラー名.rb
  def search
    @tweets = Tweet.search(params[:keyword])
  end

比べるとクラス名が違うだけで記述は一緒です。

読みにくくなりそうな複雑な処理は最初からサービスクラスを使って読みやすることが大切。
また、メンテナンス時のことを考えるとサービスクラスを使用していた方がわかりやすい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?