Help us understand the problem. What is going on with this article?

0から偏見オンリーで覚えるMVC - Model編

More than 3 years have passed since last update.

MVCフレームワークで疲弊した諸君、独断と偏見で覚えてみないか?
もちろん私の考え方は大分歪んでいるだろうが、面白い体験になることは保証する
なお、今回はDjangoを例として使う

MVCの核心を一言で表すならこうだろう
「コード化されたER図に分けられたロジックにある程度動くHTML」
こいつの何が凄いのか、今回はModelを例にして説明しよう
View、Controllerも確かに凄い技術ではあるのだが、Modelの威力には敵わない

フルスクラッチPHPでスキーマを変更してみる

君はフルスクラッチPHPでコードを書く現場に所属された
上司がSQLのスキーマを変えてくれと言う
その場合、君は以下の処理をしなければならない

  1. ExcelでER図を更新する
  2. 生SQL文でDBを更新する
  3. DBのチェックを入れる
  4. テストを行う(現場によっては手動テストかもしれない)
  5. 深夜になった。君はようやく帰れる

ER図を知らない人向けに説明すると、ざっくり言うとにRDBMSの関連図だ
これをExcelで作るのはただただ苦痛だ。その上コロコロ変わりやがる
生SQL文はレガシーで、今時触りたい代物ではない
DBのチェックなんて出来る事ならしたくない
テスト? どうせ手動だろ? もう勘弁してくれよ
ようやく帰れた頃にはもう睡眠時間しか残されてない
こんなくたくたな毎日からおさらばしよう

Modelの威力を発揮する

君はDjangoを扱う現場に所属された
上司がSQLのスキーマを変えてくれと言った
その場合、君は以下の処理だけでいい

  1. Djangoでスキーマを変更してみる
  2. DBの書き換え(マイグレートと呼ぶ。モダンなSQL文みたいなものを自動生成してスキーマを書き換える事)をする
  3. テストを行う
  4. お昼でさようなら

嘘のような話だが、フルスクラッチPHP書きにとっては残念ながら真実だ
Modelと呼ばれる、ER図をコードにしたものを書き換え、マイグレートして、テストを行うだけだ
マイグレートと聞くと難しいと感じる人も多いかもしれないが、やる事はターミナル開いて以下の二行を打つだけだ。

python manage.py makemigrations
python manage.py migrate

これだけでSQLのスキーマは変わった。後はテストをするだけで現場からおさらば出来る

実際に体験してみる

この素晴らしい機能を実際に体験してみよう

君は、上司に「簡単なTODOアプリのモデルを作ってくれ」と言われた
整理した結果、ユーザーとTODOのテーブルと、外部キーがあれば十分なことが把握した

フルスクラッチPHPで書くなんていう拷問はやめよう。いきなりDjangoに飛び込むんだ。

まず、君はModelを書く事にした
その結果、以下のコードを書いた

models.py
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=20)
    password = models.CharField(max_length=20)

class Todo(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.CharField(max_length=140)

厳密には間違ったコード(Djangoにはユーザーのモデルが標準で搭載されており、それを引っ張ってくるだけで十分。それとパスワードを暗号化していない)なのだが、説明が楽だし何より上司の目はごまかせそうなので大丈夫だろう
一応コードの意味を説明すると、1行目でDjangoのmodels機能を引っ張ってきて、継承している
CharFieldはただの文字列型、ForeignKeyはただの外部キーだ
こんなちっぽけなコードだけで、君のアフター5は保証される

次は、DBを更新しよう
と言ってもやることは簡単だ。さっき説明した通りに

python manage.py makemigrations
python manage.py migrate

これだけで君はDBの書き換えに成功する
後は自動テストなり手動テストなりして現場からおさらば出来る
浮いた時間でアニメでも見よう。お薦めはプリパラだ

View,Controllerの解説

動くHTMLとロジック、以上
需要があれば書く

preta774
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away