🧹

💎 可読性とテスト容易性向上!Railsでのビューとモデルの責務分離

2024/06/05に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

突然ですが

以下はサンプルコードです

app/actions/api/v1/items/index/action.rb

creative.items.tags.map(&:format_tag)

ビューに関するロジックを含んでいるため、モデル層から直接呼び出すのは良くありません。

よくない点の詳細

責務の分離が不明確

format_tagのようなメソッドはタグのフォーマットを行うものでありプレゼンテーション層に属する処理です。モデル層はデータの保存・取得・ビジネスロジックに集中すべきで、ビューに関するロジックを含むべきではありません。

可読性の低下

creative.items.tags.map(&:format_tag)というコードは役割が曖昧であり、モデルとビューの責務が混在しているためコードの可読性が低下します。

テストの難易度

モデルにプレゼンテーションロジックが含まれると、テストが複雑になります。ビューのロジックはビューのテストでカバーするべきでありモデルのテストでカバーするべきではありません。

改善例

例えば、Railsのヘルパーを使用して、format_tagのロジックを移動させます。

モデル

class Tag < ApplicationRecord
  # ここではformat_tagの定義は行わない
end

ビュー

<% creative.items.tags.each do |tag| %>
  <%= format_tag(tag) %>
<% end %>

ヘルパー

module TagsHelper
  def format_tag(tag)
    # タグのフォーマット処理をここに定義
  end
end

このようにすることで、モデルはデータ管理に専念し、ビューはプレゼンテーションに専念することができ、責務の分離が明確になります。

最後に

ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉

noteでも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion