4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

東京海洋大学NePPAdvent Calendar 2024

Day 3

Ruby on RailsにおいてのMVCモデル

Last updated at Posted at 2024-12-03

この記事は東京海洋大学NePPの Advent Calendar 2024の3日目です。

はじめに

この記事は、自身がRuby on RailsにてMVCモデルについて学んだことと+αをアウトプットの機会としてを書きました。
あくまで個人的な見解ですので、あしからずご容赦ください。

MVCモデルとは?

まずMVCってなんだよってところからですが、
MVCモデルは、ソフトウェアの設計パターンの一つで、特にWebアプリケーション開発で広く使われています。一般的なアーキテクチャの一つです。

MVCは以下の3つのコンポーネントから構成されます:

・Model(モデル)
・View(ビュー)
・Controller(コントローラー)

それぞれが異なる役割を持ち、アプリケーションの機能を分割して扱いやすくしています。
Controller.jpg
Canvaで簡単に図式化してみました。

Model(モデル)

・データとビジネスロジックを管理する部分。
・データベースとやり取りし、アプリケーション内でのデータを扱う。
・データのバリデーションを管理する部分。

お気持ちとしては、「データを正しく管理するお仕事

class User < ApplicationRecord
  validates :name, presence: true
end

View(ビュー)

・ユーザーに表示する部分(UI部分)。
・HTMLやCSS、JavaScriptなどを使い、データを視覚的に表現する。
・コントローラーから渡されたデータを受け取り、Webページとして表示する。

お気持ちとしては「どんなデータかは知らないけど、モデルとコントローラーから渡されたデータをユーザーに表示するのがお仕事

<h1>Welcome, <%= @user.name %>!</h1>

Controller(コントローラー)

ユーザーのリクエストを処理し、適切なモデルやビューを呼び出す。
例えば、URLに対応するアクションを実行し、モデルを利用してデータを取得し、ビューに渡す。

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end
end

お気持ちとしては、「ユーザーからリクエストが来たら、最初に対応する場所で、『このデータが欲しい』とか『この情報を送信したい』って頼まれたら、Modelからデータを取ってくるという、モデルとViewの架け橋的存在」

サービスクラス

サービスクラスの目的とメリット↓

役割の分離
コントローラーはリクエストとレスポンスの管理に専念し、サービスクラスにビジネスロジックを委託します。コントローラーの肥大化を避けることに使われます。
モデルはデータベースとのやり取りやバリデーションに集中し、複雑なロジックを避けることができます。

コードの再利用性
サービスクラスに切り出すことで、同じロジックを複数のコントローラーやモデルから呼び出せます。

テストのしやすさ
ビジネスロジックを独立させることで、サービスクラス単体でテストを行いやすくなります。

これらは、Ruby on Rails のDRY原則にも当てはまりますね。👀

インターン先では、ビジネスロジックはコントローラーには書かず全てサービスクラスに書くように言われましたが、場面によってはアンチパターンになることもあるそうです。

おわり

この記事がこれからMVCモデルについて学ぶ方の少しでも手助けになればと思います!

参考

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?