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

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

Jun 23, 2016 pm 01:19 PM

私は 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

See all articles