🎮
What is MVC?
Model-View-Controller (MVC)は、古くあるデザインパターンで、1980年代に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