2019年phpカンファレンスでの『MVCとはなにか』の講演について、思ったことをまとめてみました。
講演資料
この講演を聞いたきっかけ
この前プライベートでLaravelを触ってみました。
会社のシステムは違うフレームワークでやっているため、結構新鮮だったとともに「model」の考え方が全然違った。
今までmodelは「いろんなところで使っている関数をまとめる場所」というイメージでした。
そのため、DB接続系の処理も書いていたが、Laravelでは書かない。みたいな記述を見つけて、「modelって何書けばいいんだろう、、、」と思っていました。
そこで、modelの概念について勉強しようと思い、この講演を聞いてみました。
講演を聞いて
「modelってなに、、、?」
という疑問がより深まりました(笑)
なぜそうなったかは、これからゆっくり書いていきます。
内容(解釈をかなり入れております)
システム作ってよ!
大体のシステム開発はここから始まるかと思います。
「こういう不便なところがある」というニーズから、それを解決するために開発を行っていくのが通常です。
その問題を解決するためにエンジニアは、「処理で問題解決する」という手法と「動きで問題解決する」という二つの方法を取るのが一般的です。
それらを解決するために実装する。それが実装されるのが、「controller」や「view」なのかなぁと思います。
受け取ったデータに関して、こういう風に処理して、こういうデータを格納する。これがcontrollerの役割。
ここを押したら、こうなるだろうなぁというユーザビリディを考え、思った通りに動くシステムにする。これがviewの役割。
じゃあ、modelの役割は、、、?
個人ごとの問題
同じシステムを使っていても、持っている課題は別のものになることは多いです。
ユーザAはαという点に課題を感じていて、ユーザBはβという課題を抱える。しかもそれをそれぞれ解決しないといけない。
このような場面では、controllerやviewを使い、個別で解決してあげる必要があります。
うまく表面をチューニングしてあげることができるのもシステム運用では大事なため、その役割を持っています。
じゃあ、modelの役割は、、、?
問題の根本を見抜く
αという課題でも、βという課題でも、その根本にある課題は同じであることは多いです。
それを解決するのが、modelの役割かと思います。
今まではテーブルⅠしか更新してなかったけど、ユーザの要望でテーブルⅡも一緒に更新するようにする。
こういうシステムの根本に関わることを解決するのが、modelの役割になります。
自分が考えたmodelのあり方とは
modelとは、「システム思想の反映」だと思いました。
このシステムはなぜ作られたのか、何のためにつくられたのか。が反映しているものにすべきではないかと思いました。
modelを見るとそのシステムがなぜ作られたのか、どういう風になっていくべきなのか。が伝わるのではないでしょうか?
ユーザの問題をちゃんとキャッチアップして、その根本を見ていく、そしてそれを反映させていく
という箇所がmodelの役割かなぁと感じました。
modelってなに、、、?
はじめに何度も書いたのですが、改めて自分の関わっているシステムを考えた時、そのシステムのmodelのあり方って難しいなぁと思いました。
システムが社会にどういう影響を与えていて、どういう風に発展していくべきか。そういうことを考えながら、組んでいく必要がある部分で、システムそのものが表現されている部分だからこそ、もっともっと深く考えるべきだなぁと思いました。
最後に
そう思って再度資料を見ていただければ、何となーく感じ方が変わるのかなぁ、、、
今回の講演で言いたかったことを10%も吸収できてない気がするけど、とりあえず思ったことを書いてみました。
これ違うよってことがあれば是非コメントください!
P.S.
面白いツイートがあったので追記。
https://twitter.com/Sally_42/status/1201024628581253121