Entries

スポンサーサイト

カテゴリ:スポンサー広告
更新日:--------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Delphi for PHP] DelphiとMVC

カテゴリ:RadPHP(Delphi for PHP)
更新日:2009-10-18
Delphi for PHPを使っている理由はいくつかあるんだけれど、その最大の理由は「Delphiである」ということ。Delphi (for Win)で培ってきた考え方が流用できるというのは大きい。その一つが、フォームとデータモジュールの使い分けである。

基本は、データベースの操作を含むロジック全般をデータモジュールに記述し、隠ぺいすることにある。入力イベントは、フォーム上のOnClickなどで受けることになるが、ここでの処理は、ほとんどの場合、フォーム上のデータをデータモジュールの処理関数に引き渡すだけになる。処理の結果は、表示コンポーネントのプロパティに値を設定すれば、Delphiの方で処理してくれる。あるいはデータベースならば、データソースというコンポーネントを使って、データモジュールから直接表示も自動化される。MVCに当てはめれば、フォームがControllerとView、データモジュールがModelになるだろうか。

DelphiとMVC

DelphiにおいてControllerとViewは、明確に分離されないことになる。Viewのほとんどの機能は、コンポーネントによって実現されているためだ。VCL(Visual Component Library)というだけのことはある。あえて言えば、OnShowなどの出力系のイベントがViewになるか。ボタンのOnClickなどの入力系イベントがController。Wikipediaによれば、このようなVCが分離されていないものを拡張MVCと呼ぶらしい。

Model View Controller (Wikipedia)

UIにおける入力と出力は本質的には不可分なものであり、したがってviewとcontrollerはいつでも分離できるとは限らない。このようなM-VCとなるような構造を拡張MVCと呼ぶことがある。



MVCを理解するときの混乱のひとつが、このControllerとViewの分離についてのようだ。テキストの入力エリア(Editコンポーネント)は、表示と考えればViewだが、Controllerが入力を処理するんだから・・・これは、Controller?View?どっち?

WebアプリでMVCを考えるといろいろ混乱するのは、Webという仕組みと各種のフレームワークにControllerとViewのほとんどが隠蔽されてしまっているためではないかと思う。

たとえばDOSの時代を思い出してみる。入力といえば、キースキャンの値か、マウススキャンの値だった。その値は、通常、if文(もしくはcase文かswitch文)で分岐し、処理される。これが、Controllerである。その処理結果は、print文やグラフィックライブラリを通して画面に出力される。Viewである。

DOS時代のプログラムであれば、ControllerとViewが分離できずに混乱することはない。というか、ちゃんと分離しないとスパゲッティ化して、わけがわからなくなる。だから、MVCというモデルができてきたのだろう。

別の混乱のひとつに、ControllerとModelのどちらにロジックを書くべきか、というものがあるけど、これもフレームワークに隠蔽されているために発生しているように思う。

キースキャンの値に対しての分岐処理がControllerであるならば、そこにロジックを書く余地はない。Delphiの場合は、分岐した結果、OnClickなどの入力系イベントが発生するわけだけれど、そのイベントでの処理は、MVCの分離を考えるならば、Modelを呼び出すしかない。当然の帰結として、Modelは太る。でもそれは、ControllerとViewがフレームワークによって隠蔽化されているため、そう見えるにすぎないわけだ。イベントにロジックが書けてしまうのが、混乱の元ではあるのだけれど、同じ言語内での話なので仕方がないところか。

こう考えてくると、フレームワークを使うアプリケーション・プログラマにとって、MVCモデルというのは、それほど重要ではない。それが教えるのは、とにかくModelにだけ意識を集中すればいい、ということだ。MVCに、さらに要素を追加して拡張しようという動きもあるようだけれど、MVCにこだわるよりは、Modelを分離してるんだから、インタフェースと中身を構築するための別のモデルを考えた方がいいんじゃないだろうか。

おそらく、私が、そう考えるのは、業務アプリを作ってきたからなのだろうとは思う。ユーザーインタフェースはそこそこでいいから、それよりデータの整合性の方が、まずは重要だったから。Ajaxのようなユーザーインタフェースに興味のある人は、また別の見解があるかもしれないけれど。


PHPフレームワーク入門
CakePHP/Zend Framework/ symfony
本体価格 2,800円 (税込 2,940 円) 送料無料




スポンサーサイト

Appendix

プロフィール

いむら@fintopo いむら@fintopo

ガーデニングが趣味のフリーのシステムエンジニア兼プログラマ(フルスタックエンジニア)です。

仕事募集中です。個人なので、融通がききます。 大規模な開発はできないかもしれませんが、研究や製品開発レベルでの小規模開発、特に相談しながら新しいものを作っていくのが得意です。詳しくはWebサイトをご覧ください。
詳しくは「fintopoとは」をご覧ください。

> fintopoとは

このページのQRコード

季節暦

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。