🧹
💎 可読性とテスト容易性向上!Railsでのビューとモデルの責務分離
はじめに
こんにちは、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でも記事を執筆していますので、ぜひチェックしてみてください。
他にもこのようなことについて記載しているのでお読みいただければ幸いです。
最後までお読みいただき、誠にありがとうございました!
Discussion