MVC プロトタイプ
MVC はもともとデスクトップ プログラムに存在していました。M はデータ モデルを指し、V はユーザー インターフェイスを指し、C はコントローラーを指します。 MVC を使用する目的は、M と V の実装コードを分離して、同じプログラムで異なる表現を使用できるようにすることです。たとえば、統計データのバッチをそれぞれ棒グラフと円グラフで表すことができます。 C の目的は、M と V の同期を確保することです。M が変更されると、V も同期して更新される必要があります。
JAVAにおけるMVC
JAVAはWeb分野にMVCを導入し、これをベースにModel2と呼ばれるシステムが構築されました。 Web の特殊性により、JAVA の MVC とデスクトップの MVC は完全には一致しません。主な理由は、Web の V は永続的ではなく、ユーザーがアクセスするたびに V を再生成する必要があるため、V は常に M と一致しており、C が同期を制御する必要がないためです。では、JAVA の C は何をしているのでしょうか? JAVA の C は通常、プロセス ステアリングに使用されますが、実際に使用されるのは Dispatch モードであり、Desktop の C ではありません。
PHP の MVC
PHP で JAVA の MVC をそのままコピーすることは不可能です。この問題は主に M に現れます。JAVA では、M はビジネス ロジックやプレゼンテーション ロジックから独立したデータ モデルであり、JAVA Bean がこの役割を果たします。 PHP プロセスはメモリ内に長期間常駐しません。PHP ページの実行が開始されたときにのみ作成され、ページ解釈の実行が終了したときに終了します。このような場合、M を直接実装することはできません。したがって、MVC パターンを実装すると主張するすべての PHP プログラムは、シミュレーションを通じてのみ M を実装できます。実装方法は通常、現在のページの終了前にデータベースまたは Cookie/セッションにデータを保存し、次のページでデータベースまたは Cookie/セッションを通じて M を再構築します。 JAVA の Bean と比較すると、この方法は、メモリにデータを書き込むという単純な操作を、サーバーからクライアントまたはデータベースに送信し、再度送信する必要があると言えます。データ モデルを維持するためにこのような大きなオーバーヘッドを使用し、最後にそのモデルをデータベースに戻すよりも、必要に応じてデータベース内のデータを直接更新する方が良いでしょう。
PHP における現在の MVC アーキテクチャは、次の図で表すことができます。
それでは、V を見てみましょう。現在、多くの PHP プログラムは単に何らかのテンプレート テクノロジを使用し、説明に「MVC アーキテクチャの採用」と記載しています。実際、大多数の PHP テンプレート プログラムは、MVC が重視する表示ロジックとビジネス ロジックの分離ではなく、HTML と PHP を分離しているだけです。 HTML と PHP が混在するページも MVC の一部にすることができます。表示ロジックとビジネスロジックを分離する方法については、まだ満足のいく解決策がありません。個人的には、その実施計画には賛成です。 C に関しては、JAVA に似ており、現在でもステアリングに使用されています。これは、PHP では実際には重要ではありません。