ホームページ >バックエンド開発 >PHPチュートリアル >PHPのモデルはどのような役割を果たしますか?

PHPのモデルはどのような役割を果たしますか?

WBOY
WBOYオリジナル
2016-06-23 13:19:541204ブラウズ

私は MVC モードでプログラミングをしていましたが、他の 2 つの層はビューを担当し、もう 1 つはプロセス制御を担当するという定義について突然混乱しました。 , しかし、モデルとは毛織物のことを指しますか?

文字通り理解すると、モデル層と呼ばれます。モデルとは何ですか?ほとんどのモデルの定義は次のとおりです

class User extends Model{    public function add(array $user)    {        // 新增代码    }    public function delete($id)    ...}

モデルは、データベースを追加、削除、確認、変更するためのインターフェイスをカプセル化したものに過ぎませんか?モデルはデータテーブルのマッピングであるべきだと考える人もいますが、それは ORM 実装ですか?





MVC の概念は、従来のデスクトップ ソフトウェア開発から来ており、イベントが発生すると、モデルはビューにアクティブに通知できますが、これは HTTP プロトコルでは不可能です (例外を除きます)。長い接続彗星の場合)。長い間、PHP 業界の MVC フレームワークにおける M と C の理解と適用は洗練されていませんでした (もちろん、ほとんどのビジネスを満足させるには十分です)。これにより、PHPer には、コードを記述する際にビジネス ロジックを C に配置するか M に配置するかという明確なルールがありません。よくある問題は次のとおりです:

  1. 答えは、対応する回答者に評判を追加して C で記述することです

  2. M 層は薄すぎるため、フレームワークの Model (または DB クラス) を継承してデータベースの追加、削除、変更を実装するだけです

  3. 非データベース操作 (Weibo OpenAPI の呼び出しなど) は Util クラスにパッケージ化する必要があります

  4. ユーザー入力 ($_GET、$_POST) は、M レイヤーと Util の両方で世界中で実行されます

ほとんどのシナリオでは PHP が使用されるため、Web アプリケーションはデータベース駆動型アプリケーションであるため、さまざまなデータベース駆動型の高速開発フレームワークが登場しています。たとえば、CakePHP の Model クラスはデータ テーブルに対するいくつかの CURD 操作を単純に定義しており、Qcodo はそれに直接基づいています。データ テーブル構造。MVC 3 層スキャフォールディング コードを自動的に生成します。

PHP アプリケーションは 5 層構造であると理解しています。M 層は、Biz Model、DAO、および Infrastructure に分割される必要があります。4 年前に説明した PPT の数ページを投稿します。



ダウンロード完全な PPT: " Evolution of Web Application Architectures(ppt2003).ppt" http://vdisk.weibo.com/s/535FV



プロジェクトの規模と複雑さに応じて、単純なデータベース CRUD だけです。Model が完全に ORM に置き換えられれば問題ありません。

私のプロジェクトでは、モジュールと複数のデータソースが複雑であるため。モデルは 3 つの層に細分されます。

最上位層はイベント スケジューリングとキャッシュ スケジューリングを担当します

中間層は抽象化されており、これを ModelItem と呼びます。 ModelItem のデータ ソースは ORM である場合もあれば、Web サービスからのものである場合もあります。 ModelItem データ間の関係、つまり従来の One2One、Many2Many などの関係をブリッジできます。ただし、この関係は ORM に限定されず、すべてのデータに普遍的に適用できるため、データ Product が使用される可能性が非常に高くなります。データベースからのデータは、淘宝網ウェブサービスからリンクされることができます。

最下層は、ORM や Web サービスなどのデータ インターフェイスの基礎となる実装です。

プロジェクトページ: https://github.com/AlloVince/eva-engi...

つまり、私の結論は次のとおりです。プロジェクトが単純であれば、モデルの機能にはデータベースをオブジェクトに抽象化することが含まれますが、これに限定されません。モデルは待機可能 ORM と比較して、複雑な場合はモデルを細分化するのが最善です。

アプリケーションには、アプリケーション ロジックとビジネス ロジックが含まれます。 (参考リンク: http://www.wo2jia.cn/home/index.php?c...)

アプリケーションロジックは、アカウント操作前のログインや商品追加時の確認など、主にプロセス制御です。ショッピング カートにスペースがあるかどうかに関係なく、これらはコントローラーに配置されます。ビジネス ロジックは、ショッピング カートへの商品の追加、ショッピング カートからの商品の削除など、データを処理するためのロジックです。プロセス制御から分離するために、ビジネス ロジックをカプセル化してモデルと呼びます。

それでは、「モデル」とは一体何でしょうか?百科事典の説明によると

研究の特定の目的に従って、特定の仮定の下で、人々は、その構造、機能、属性、関係、そしてプロセス。

つまり、モデルはプロトタイプのオブジェクトを記述するために使用できます。たとえば、縮尺された航空機モデルは、実際の船の構造と特性を「記述する」ことができます。

ビジネス モデルはこのように理解できます。実際には、私たちの情報の交換と処理は、プログラム内のいくつかの構造化データによって説明できます。たとえば、スーパーマーケットに何かを買いに行く場合、ショッピング カートに商品を 1 つずつ放り込むと、このビジネスを説明するモデルにどのように抽象化できるでしょうか。まず、プログラム内で ShopCart クラス (OO) として表現できる抽象的なショッピング カートが必要です。次に、製品情報を含む Goods クラスがあり、SC は Goods を操作するためのメソッドをいくつか提供します。このプロセスはモデリングとも呼ばれます。

モデリング後、データをどのように保存するかは別の問題です。データベースまたはファイルに保存できます。厳密に言えば、モデルはデータがどのように保存されているかを認識すべきではなく、プロキシを使用して解決する必要があります。 ORM については、これをよく読んで考えることができます。

最終的には、概念をより深く理解し、それを頭の中で適用して明確にすることが鍵となります。

注: これは私自身の思考プロセスであり、私のレベルによるものであり、一部の説明が不正確である可能性があります。質問がある場合は、指摘して一緒に議論してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。