一定期間更新がないため広告を表示しています
こんにちは。藤川@質問箱です。MVCというのが何物なのかというご質問をいただいたので、僭越ながら簡単にご説明をば。
MVCというのはModel-View-Controllerの略語で、プログラミングに於ける概念のひとつです。要するに「コード(オブジェクト)の役割分担をはっきりと定めて、しっかり守ろう」ということなんですね。
MVCのうち、Modelというのはデータを保持したり、そのデータについて簡単な処理(ソートとかフィルタリングとか)が実装されたものをいいます。Viewは、画像ビューワのViewと同じで、つまり結果や操作ボタンなどを表示するもの。Controllerは、ちょっとひとことでまとめるのが難しいんですけど、いわばModelとViewの調整役みたいなもんです。
などということをダラダラ書いても仕方がないので、擬人化して考えてみましょう。例として、シノニアシティの観光案内所に登場してもらうことにします。
この観光案内所にはスタッフが三人常駐していて、それぞれをMさん、Vさん、Cさんとしましょう。Mさんは裏方担当、Vさんは窓口担当です。Cさんは案内所のマネージャで、二人の上司という立場です。
窓口のVさんは、人当たりが良くてコミュニケーション能力には長けているものの、肝心のシノニアの名所旧跡についてあまり詳しくありません。裏方のMさんはその逆で、コミュニケーション能力ゼロですが、名所旧跡に関する知識量には目を見張るものがあります。マネージャのCさんはこの二人を上手に動かし、連携させ、案内所をうまく運営していくことには手腕を発揮しますが、実は窓口対応も苦手なら、名所についてもほとんど知りません。
ある日、旅行者が案内所を訪れて「シノニアの歴史、特に三国志に関係の深い名所を周遊したい」と言いました。Vさんは「かしこまりました、少々お待ちくださいね」と旅行者に言うと、その質問をそのままCさんに伝えます。Cさんはこの質問を「西暦180年〜210年頃の大陸中国の歴史に関係が深い場所」と解釈して、その条件に該当する場所を探すようMさんに指示します。
Cさんからの指示を受け取ったMさんは、条件に合致する場所を一瞬にしてリストにまとめると、それをCさんに渡します。Cさんは、Mさんから受け取ったリストに目を通して、いわゆる名所とされていないところがあった場合はそれを除外しつつ、旅行者が見やすいように整理し、Vさんに渡します。受け取ったVさんはそれをもとに、「お待たせしました、こんな感じですね」といいつつ、旅行者に説明します。
およそこんな感じで観光案内所はうまく稼働しています。プログラミングにおけるMVCも、つまるところこれと同じです。
MVCな感じじゃないプログラムも、もちろん書くことが出来ますが、MVCなんていう用語が出来るくらいに概念化されているのは、そこにちゃんとしたメリットがあるからです。すなわち、メンテナンス性とか生産性とか、そういったものが格段に上がる訳です。
観光案内所の例で言えば、例えばVさんが産休で何ヶ月か別の人が窓口に入ることになったとしても、コミュニケーション能力さえその人に備わっていれば、案内所がうまく稼働しそうですよね? シノニアに新しい名所が出来たときも、Mさんがその知識を増やせば、再教育コストが低く抑えられそうですよね? そういうことです。
このMVCは、特にオブジェクト指向プログラミングを学習する際、教科書とか教本とかには必ず紹介されるほど、基本的かつ重要な考え方です。オブジェクト指向プログラミングでは、MVCの他にもいろいろと構築についての概念があります。それらを一般にデザインパターンといいますが、藤川はヘタレプログラマなので、MVC以外はあまり理解できてないです(^^;
さてさて、何だか意外にも長くなってしまったので、今日のところはこんな感じで。砂のシステムでこれがどのように活かされているかは、また機会があったら語ってみたいと思います。
ちなみにMacやWindowsに代表されるGUIなOSは、内部的にはオブジェクトの集合体です。これらのOSでももちろんMVCが徹底されています。何がどういう役割を担っているか、考えてみるのも面白いですよ。
こんばんは。プレス版CDの検証盤をなかなか手にすることの出来ない藤川です。明後日業者発送の火曜日着くらいかなぁと漠然と思っています。
カボチャなものを作ったりCD作ったり冬の有明例大祭で人の渦を眺めつつソバをすすったりインテでフランクをウマウマなどしてばかりで制作がちっとも進んでないような雰囲気ですが、最近は、昨年の体験版パッチやカボチャで実験的に書き直した辺りをマージしてすっかり混沌としてしまったシステムの整理をしています。整理しなおすだけで何とかなりそうなバグが結構あるので、ここを超えれば案外楽になるかも。見れば見るほど無計画な建て増しが目に付いて微妙に暗ぁくなったり落ち込んだりもしますが、元気でやってます。
方針としては、KAGと砂のシステムを並列つなぎにする感じです。せっかくTJSなんだからMVCくらいきちんと守ろうと思いました。・・・組み始めた当初はそうだったんだけどなぁ。どこで間違えたかなぁ・・・
(ヒント:7月)
こんばんは、藤川です。今日はインテックス大阪にて、大阪の冬の例大祭に参加して来ました。皆さん、お疲れさまでした。あと、スペースにいらした皆さん、ありがとうございます。今日は珍しく八割方スペースに居たわけですが、冬の5号館の寒いこと寒いこと。あれだけ風の通りが良いと夏は快適でしょうね。冬だと風邪をひくだけですが。
とある方に「そういえばブレインポケットっていうのは何なんでしょう?」と訊かれました。(『砂』の世界で)コンピュータが使うアタマの中の領域で、コンピュータとは電波でデータをやりとりしてて、などとデムパなことを口走ったりなどしてましたが、ふと考えてみると、この辺の基本設定ってどこにも説明が出てませんでしたね。いやはや、申し訳ないです。正式版をリリースするまでには文章にしたものをどこかに掲載します。
藤川は作品を作る時にまず世界を構築するところから入るタイプなんですが、どうも私の場合、一旦設定が出来上がるとその内容が「当たり前」になってしまうとでもいいますか、説明不足のまま突っ走る癖があるらしく。『砂』に関しては設定を上げたあとにストーリーを付けていったのはほづみさんなんですけれども、ほづみさんにも設定をある程度以上は詳しく伝えてなかったりします。ブレインポケットについて言えば「アタマの中の領域で、溢れると危ない」くらいしか説明してません。これでよくもシナリオを書けるもんです。凄い凄い(駄目
や、マジでそのうち設定をどこかにまとめて掲載します(ここに載せていけば話が早いような)。
明けましておめでとうございます。藤川です。今年はとりあえず隔週刊を目指したいと思います。
遅くなりましたが、冬コミお疲れさまでした。寒い中、スペースに足を運んでくださった皆さん、本当にありがとうございました。無愛想の見本みたいな顔をしてほづみさんの横に立ってましたが、つまらなかったり機嫌が悪かったりした訳ではなく、あれがデフォルトです。むしろ楽しんだり感動したりしていたくらいなんですが、気分を害された方がいらっしゃったら、すみませんでした。
さて、今年こそはゲームを完成させたいと意気込んでいるのですが、虫との戦いなどを想定すると、体験版のときにいただいたフィードバックを全て反映するのはちと難しいかもしれません。不具合はもちろん全部直しますが、機能の追加についてはビミョーな感じです。面白そうなご意見を沢山いただいているので、出来得る限り詰め込みたいとは思ってるんですけど、それで完成が遅れてしまうのでは意味がないので、どうしても優先順位を付けざるを得ず、そしてどこかに線を引いてバッサリといかざるを得ない訳で。胃に穴が空きそうな話です。某シミュレーションゲームシリーズみたいにパワーアップキットとか用意しようかなぁ(笑)。
ともあれ、今年もよろしくお願いしますです。