{}const=>[]async()letfn</>var
Webバックエンド基礎

MVCアーキテクチャパターン

MVCの詳細な説明:MVCとは何か、なぜ必要なのか、どのように機能するのか。わかりやすい例と同様のパターン。初心者向けのコードを使用して、MVC の使用を開始する方法を学びます。

К

Kodik

著者

3分で読める

プログラミングにおけるアーキテクチャパターンについて聞いたことがあるなら、 MVC. 😎 これは何ですか?なぜ必要なのですか?一緒に見ていきましょう。できるだけシンプルに、わかりやすく説明します。

/

MVCとは? 🤔

MVC の略 Model-View-Controller (モデル-ビュー-コントローラー)。これは、コードの開発と保守を容易にするようにコードを整理するのに役立つアーキテクチャパターンです。

MVCはアプリケーションを3つの主要なコンポーネントに分割します。

  • モデル — データとその処理ロジックを保存します。

  • ビュー — ユーザーへのデータの表示を担当します。

  • コントローラー — モデルとビューを結びつけ、ユーザーのアクションを管理し、ビューに送信するデータを決定します。

MVCが必要な理由は? 🤓

MVCの主な目的は、コードをわかりやすくし、責任を分担することです。たとえば、データ処理のロジックを変更する必要がある場合は、 Model、画面表示を担当するコード(View)はそのまま残されます。これにより、開発が簡素化され、コードの読みやすさと保守性が向上します。

MVCは、ユーザーインターフェイスをビジネスプロセスのロジックから分離するために、Web開発でよく使用されます。このような分割により、複数の開発者が1つのシステムで並行して作業できます。誰かがインターフェースを扱い、誰かがデータ処理のロジックを扱います。

MVCの類似製品

MVC以外にも、次のようなアーキテクチャパターンがあります。

  • MVP (Model-View-Presenter):MVCに似ていますが、コントローラーが置き換えられています Presenter — Viewとの連携が強化されました。

  • MVVM (Model-View-ViewModel):デスクトップおよびモバイルアプリケーションでよく使用されるパターン。特にAngularやVueなどのフレームワークで使用されます。

これらのパターンはすべて、コードのサポートを簡素化するためにコードの一部間で責任を分割するという1つの目的を持っています。

MVCはどのように機能しますか? 🔍

簡単な例を使用して、MVCの主要コンポーネントがどのように機能するかを見てみましょう。

ノートアプリを想像してみてください。メモを作成し、表示し、削除することができます。

1. Model(モデル)

モデルはデータの保存と管理を担当します。この例では、メモのリストになります。

class NoteModel {
  constructor() {
    this.notes = [];
  }

  addNote(note) {
    this.notes.push(note);
  }

  getNotes() {
    return this.notes;
  }

  deleteNote(index) {
    this.notes.splice(index, 1);
  }
}

ここにはクラスがあります NoteModel、メモを追加、削除、受信できるようにします。

2. ビュー

ビューは、ユーザーにデータを表示する役割を果たします。たとえば、画面にメモが表示されます。

<div id="app">
  <input type="text" id="noteInput" placeholder="Enter a note...">
  <button onclick="addNote()">Добавить заметку</button>
  <ul id="noteList"></ul>
</div>

ビューは通常、データを表示し、ユーザーが新しいデータを入力するHTMLです。

3.コントローラー

コントローラーはすべてを結びつけます。ユーザーからの入力を受け取り、モデルとやり取りしてデータを変更または表示します。

const model = new NoteModel();

function addNote() {
  const input = document.getElementById('noteInput');
  const note = input.value;
  if (note) {
    model.addNote(note);
    input.value = '';
    updateView();
  }
}

function updateView() {
  const noteList = document.getElementById('noteList');
  noteList.innerHTML = '';
  model.getNotes().forEach((note, index) => {
    const li = document.createElement('li');
    li.textContent = note;
    li.onclick = () => {
      model.deleteNote(index);
      updateView();
    };
    noteList.appendChild(li);
  });
}

ここ コントローラー 間の相互作用を管理します ViewModelユーザーがメモを追加すると、 Controller モデルのメソッドを呼び出し、ビューを更新します。

フレームワークのMVC 📚

多くの人気のあるフレームワークはMVCアーキテクチャを使用しています。MVCが現代のフレームワークでどのように実装されているか、いくつかの例を見てみましょう。

1. Backend: Ruby on Rails

Ruby on Rails — MVCの原則に従う、Webアプリケーションのサーバー側を開発するための人気のあるフレームワークです。

  • Model: Railsでは、モデルは通常データベースに関連付けられ、アプリケーションのデータを管理します。

  • View: ビューは、ユーザーにデータを表示する HTML テンプレートです。

  • Controller: コントローラーはユーザーからのリクエストを受け取り、モデルを使用して処理し、ビューを返します。

Ruby on Railsのコントローラーの例:

class NotesController < ApplicationController
  def index
    @notes = Note.all
  end

  def create
    @note = Note.new(note_params)
    if @note.save
      redirect_to notes_path
    else
      render :new
    end
  end

  private

  def note_params
    params.require(:note).permit(:content)
  end
end

2. Frontend: Angular

Angular は、クライアント側を開発するためのフレームワークであり、MVCに似たMVVM(Model-View-ViewModel)を介してMVCアーキテクチャを実装します。

  • Model:アプリケーションデータはサービスに保存されるか、コンポーネントに直接保存されます。

  • View:HTMLテンプレートはデータを表示します。

  • Controller/ViewModel: Angularのコンポーネントはコントローラーの役割を果たし、データをビューにバインドします。

Angularのコンポーネントの例:

import { Component } from '@angular/core';

@Component({
  selector: 'app-notes',
  template: `
    <div>
      <input [(ngModel)]="note" placeholder="Enter a note...">
      <button (click)="addNote()">Add a note</button>
      <ul>
        <li *ngFor="let note of notes; let i = index" (click)="deleteNote(i)">{{ note }}</li>
      </ul>
    </div>
  `
export class NotesComponent {
  note: string = '';
  notes: string[] = [];

  addNote() {
    if (this.note) {
      this.notes.push(this.note);
      this.note = '';
    }
  }

  deleteNote(index: number) {
    this.notes.splice(index, 1);
  }
}

3. Frontend: React

React は、コードを適切に整理することでMVCの原則に従うことができる、ユーザーインターフェイス開発のための人気のあるライブラリです。

  • Model: データは、コンポーネントの状態またはReduxなどの個別の状態マネージャーに保存できます。

  • View:Reactコンポーネントは、データを表示するUIです。

  • Controller: コントローラーは、状態を管理し、ビューを更新するコンポーネントのロジックと見なすことができます。

Reactのコンポーネントの例:

import React, { useState } from 'react';

function NotesApp() {
  const [note, setNote] = useState('');
  const [notes, setNotes] = useState([]);

  const addNote = () => {
    if (note) {
      setNotes([...notes, note]);
      setNote('');
    }
  };

  const deleteNote = (index) => {
    setNotes(notes.filter((_, i) => i !== index));
  };

  return (
    <div>
      <input
        type="text"
        value={note}
        onChange={(e) => setNote(e.target.value)}
        placeholder="Enter a note..."
      />
      <button onClick={addNote}>Добавить заметку</button>
      <ul>
        {notes.map((note, index) => (
          <li key={index} onClick={() => deleteNote(index)}>{note}</li>
        ))}
      </ul>
    </div>
  );
}

export default NotesApp;

4. Backend: Laravel (PHP)

Laravel — これは、MVCアーキテクチャに従うPHPフレームワークです。

  • Model:Laravelのモデルはデータベースと対話し、データを管理します。

  • View: ビューは、ユーザーにデータを表示するブレードテンプレートです。

  • Controller: コントローラーはユーザーのリクエストを受け取り、処理して、適切なビューを返します。

Laravelのコントローラーの例:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Note;

class NotesController extends Controller
{
    public function index()
    {
        $notes = Note::all();
        return view('notes.index', compact('notes'));
    }

    public function store(Request $request)
    {
        $request->validate(['content' => 'required']);
        Note::create($request->all());
        return redirect()->route('notes.index');
    }

    public function destroy(Note $note)
    {
        $note->delete();
        return redirect()->route('notes.index');
    }
}

5. Backend: Django (Python)

Django — MVCと同様のMTV(Model-Template-View)アプローチを使用するPythonフレームワークです。

  • Model: Djangoのモデルはデータを管理し、データベースの構造を記述します。

  • Template (View): テンプレートは、ユーザーにデータを表示する役割を担います。

  • View (Controller): ビューはユーザーからのリクエストを受け取り、適切な応答を返します。

Djangoでの表示例:

from django.shortcuts import render, redirect
from .models import Note

# メモリストを表示するためのビュー
def notes_list(request):
    notes = Note.objects.all()
    return render(request, 'notes/notes_list.html', {'notes': notes})

# 新しいメモを作成するためのビュー
def add_note(request):
    if request.method == 'POST':
        content = request.POST.get('content')
        if content:
            Note.objects.create(content=content)
        return redirect('notes_list')
    return render(request, 'notes/add_note.html')

# メモを削除するためのビュー
def delete_note(request, note_id):
    note = Note.objects.get(id=note_id)
    note.delete()
    return redirect('notes_list')

MVCを使用する利点

  • 開発の簡素化:アプリケーションの個々の部分を簡単に操作できます。

  • サポート性の向上: アプリケーションのロジックを独立した部分に分割することで、変更が容易になります。

  • 並列作業:複数の開発者がシステムの異なる部分で同時に作業できます。

  • コードの再利用: モデルとビューのコンポーネントは、アプリケーションの他の部分で使用できるため、開発の効率が向上します。

MVCを使用する他のフレームワーク

  • ASP.NET MVC: C#を使用したWebアプリケーション開発のためのMicrosoftのフレームワーク。モデル、ビュー、コントローラーを明確に分離し、開発を透明で便利にします。

  • Django:MVCに似たMTV(Model-Template-View)アプローチを使用するPythonフレームワーク。 Model Djangoでデータを管理し、 Template 提示の責任者、および View コントローラーの役割を果たします。

  • Laravel:MVCアーキテクチャにも従うPHPフレームワーク。 Model データベースとのやり取りを管理します。 View 表示を担当し、 Controller ユーザーリクエストを処理します。

結論🎉

MVC — コードを構造化し、よりクリーンで維持しやすくするための優れた方法です。これにより、プロジェクトの作業を開発者間で分割し、将来のサポートを簡素化できます。メモの例では、アプリケーションをモデル、ビュー、コントローラーに分割することで、アプリケーションを簡単に整理する方法を説明しました。

MVCを使用して簡単なものを実装してみてください!これにより、このパターンの仕組みをよりよく理解できます。プロジェクトでのご成功をお祈りします! 🚀

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要