MVC を使用すると、プログラムに多くのデータベース操作が追加され、パフォーマンスの低下が発生し、これには本当に驚きました。 MVC は単なるフレームワークであり、データベース操作とは何の関係もありません。 MVC は明確なプログラミング開発モデルを提供するだけであり、それを適切に扱う限り、多くの不必要なデータベース操作を実行することは不可能です。 MVC により、プログラマが知らないうちにさらに多くのデータベース操作を実行できるようになる場合、それは明らかに優れた MVC アーキテクチャとは言えません。 MVC は単純な開発フレームワークを提供するだけでよく、多くのライブラリ クラスを統合する必要はなく、プログラマがライブラリ クラスを使用することを選択するのが最善だと思います。
私個人としては、MVC の理論を詳しく勉強したことはありませんが、モデルはデータベースのカプセル化であり、モデル メソッドを呼び出すことで、対応するデータを取得できますが、プログラマは実装の詳細を気にする必要はありません。実際の開発では、データベースのテーブルがモデルに相当することが多いでしょう。
たとえば、ユーザー情報テーブル userinfo はモデル ユーザーに対応し、モデル ユーザーの add() メソッドを呼び出すことでデータベースにデータを追加し、select() を通じてクエリを実装できます。アップデートを通じて更新することができます。同時に、モデルは、mysql、oracle、SQL サーバーのいずれを使用するかにかかわらず、特定のデータベースの種類に依存しない必要があります。
同時に、WEB開発でRORを使用することはお勧めしません。複雑な複数テーブルのクエリにはSQL言語を使用するのが非常に便利で高速であり、パフォーマンスも優れています。 SQL の知識さえないプログラマーは、資格のあるプログラマーとは言えないと思います。したがって、直接 SQL クエリを実装するためのクエリ メソッドをモデルに提供します。
以下は、PHP で MVC モデルを開発したおおよその結果です。これは完全なコードではありません。完全なコードについてはデモ パッケージを参照してください。
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ? </span></span></li><li><span>class module{ </span></li><li class="alt"><span>var $mysql;//数据库操作类,<br />可以是mysql,oracle,sql等等 </span></li><li><span>var $tbname;//模型对应的表名称 </span></li><li class="alt"><span>var $</span><span class="attribute">debug</span><span>=</span><span class="attribute-value">false</span><span>;//是否是调试模式 </span></li><li><span>function module($tbname,$</span><span class="attribute">db</span><span>=</span><span class="attribute-value">''</span><span>){}<br />//构造函数 </span></li><li class="alt"><span>function _setDebug($</span><span class="attribute">debug</span><span>=</span><span class="attribute-value">true</span><span>){}</span></li><li class="alt"><span>//开启或者关闭调试模式 </span></li><li><span>function add($row,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){}</span></li><li><span>//新增加一条记录 </span></li><li class="alt"><span>function query($strsql){}//直接查询sql语句 </span></li><li><span>function count($</span><span class="attribute">where</span><span>=</span><span class="attribute-value">''</span><span>,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){ }</span></li><li><span>//计数统计 </span></li><li class="alt"><span>function select($</span><span class="attribute">where</span><span>=</span><span class="attribute-value">''</span><span>,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){}</span></li><li class="alt"><span>//查询 </span></li><li><span>function delete($</span><span class="attribute">where</span><span>=</span><span class="attribute-value">''</span><span>,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){}</span></li><li><span>//删除满足条件的一个记录 </span></li><li class="alt"><span>function update($set,$where,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){}</span></li><li class="alt"><span>//更新指定记录 </span></li><li><span>function detail($where,$</span><span class="attribute">tbname</span><span>=</span><span class="attribute-value">''</span><span>){}</span></li><li><span>//详细显示一条记录 </span></li><li class="alt"><span>} </span></li><li><span class="tag">?></span><span> </span></span></li></ol>
このモデルでは、配列とデータベース フィールドを使用して対応させます。初期の PHPBEAN では、オブジェクトを使用して対応していました。しかし後になって、PHP で MVC モデルを開発するこの方法は PHP では良くなく、不要なクラスが大量に追加されていると感じました。配列を使用する方が便利で優れています (PHP の配列は確かに優れており、JAVA よりもはるかに優れています)。
以下のデモでは、デモンストレーションに mysql データベースを使用し、データベース操作クラスを元のライブラリ クラスの 1 つから変更しました。
以下では、デモの使用方法を詳しく説明します。 ^_^
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><</span><span> ? </span></span></li><li><span>require_once(SITE_PATH.'/<br />libs/phpbean.class.php'); </span></li><li class="alt"><span>require_once(SITE_PATH.'/<br />libs/mysql.class.php'); </span></li><li><span>$</span><span class="attribute">phpbean</span><span>=</span><span class="attribute-value">new</span><span> phpbean(); </span></li><li class="alt"><span>global $phpbean; </span></li><li><span>$</span><span class="attribute">mysql</span><span>=</span><span class="attribute-value">new</span><span> mysql("localhost"<br />,"****","****","52site"); </span></li><li class="alt"><span>$phpbean-</span><span class="tag">></span><span>register('db',$mysql); </span></span></li> <li><span>unset($mysql); </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
次に、次のコードで新しい mysqlController.class.php ファイルを作成します:
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><</span><span> ? </span></span></li><li><span>/** </span></li><li class="alt"><span>* MVC演示demo </span></li><li><span>* 仅仅实现最基本的MVC功能,不包含安全处理<br />,数据过滤,及其他优化措施。 </span></li><li class="alt"><span>* @author:feifengxlq </span></li><li><span>* @since:2007-1-24 </span></li><li class="alt"><span>* @copyright http://www.phpobject.net/blog/ </span></li><li><span>*/ </span></li><li class="alt"><span>class mysqlController </span></li><li><span>{ </span></li><li class="alt"><span>var $module; </span></li><li><span>function mysqlController(){ </span></li><li class="alt"><span>require_once(SITE_PATH.'/libs/module.class.php'); </span></li><li><span>$this-</span><span class="tag">></span><span class="attribute">module</span><span>=</span><span class="attribute-value">new</span><span> module('52site_siteinfo');<br>//52site_siteinfo为表名称 </span></span></li> <li class="alt"> <span>$this-</span><span class="tag">></span><span>module-</span><span class="tag">></span><span>query("set names 'gb2312'");<br>//如果是MYSQL5请加上这句 </span> </li> <li><span>} </span></li> <li class="alt"><span>function indexAction(){ </span></li> <li> <span>print_r($this-</span><span class="tag">></span><span>module-</span><span class="tag">></span><span>select());//这样实现了读取数据 </span> </li> <li class="alt"><span>} </span></li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>