🎮

What is MVC?

2024/01/08に公開

Model-View-Controller (MVC)は、古くあるデザインパターンで、1980年代にSmalltalkによって開発されたそうです?

https://ja.wikipedia.org/wiki/Smalltalk

有名なフレームワークだと、Ruby on Railsで使われてますね。実は昔からあった...

MVCは、Modle層、View層、Controller層の3つに分けて開発をします。

Modle層の役割

アプリケーションで使うデータの基本的な振る舞いやそれに関するロジックを保持します。

  • データの構造の表現
  • Web APIとのやりとり
  • その他データの振る舞いに関するロジック

UIやレイアウトに関するロジックは保持しない。SwiftのRealmというローカルデータベースを使った例だとこのようになっております。

import Foundation
import RealmSwift

// カウンターのモデルを定義する
class Counter: Object, ObjectKeyIdentifiable {
    @Persisted(primaryKey: true) var id: ObjectId
    @Persisted var count: Int = 0
}

Railsだとこんな感じですね。最近書いてないので、よくわからないですが😅

# db/migrate/20230728235745_create_users.rb

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

View層の役割

モバイルでもWebの技術でも共通ですが、UIを作るのが役割です。Controllerからデータを受け取ってUIに表示をします。Web APIを使った例だとインターネットネットから渡されたJSONのデータをデコードして、テキストや画像に変換します。

Controller層の役割

ModelとViewの間にあって、橋渡しをするとか仲介すると表現されることをやってくれます。

  • Railsなら、MySQLの情報をerbテンプレートエンジンに渡す。
  • UIKitならUIViewControllerのことで、Modelからデータを受け取ってViewに渡しUIを更新します。

まとめ

今回は、MVCについてわかりやすく解説してみました。最近Flutterで使ったこともあるのですが、それぽいのが作れなくて、なんちゃってMVCになってしまいましたね。MVCへの誤解になりそうだから、モデルとViewがあって、その間のやりとりをコントローラーでしてないと、MVCとは言えないな〜と悩まされました。

Discussion