ホームページ バックエンド開発 PHPチュートリアル PHP Web サイトの MVC アーキテクチャにおけるさまざまな誤解

PHP Web サイトの MVC アーキテクチャにおけるさまざまな誤解

Jun 13, 2016 pm 12:57 PM
mvc nbsp php session

PHP Web サイトの MVC アーキテクチャ モデルにおけるさまざまな誤解

??? MVC アーキテクチャ パターンは、もはや新しいテクノロジでも、新しい用語でもありません。ただし、社内のオープンソース PHP 開発フレームワーク、または国産の PHP オープンソース ソフトウェアをご覧いただければと思います。これらのコードの多くは MVC ではなく、模倣であることを見つけるのは難しくありません。その多くは MVC のための MVC です。または、MVC の一部の機能のみを提供します。本当の意味でのMVCではなく。もちろん、その理由の多くは、ソフトウェア開発者がデザイン パターンを理解しておらず、MVC の基本的な目的を理解していないことです。
??? ここから、まず MVC の基本的な目的を明確にしましょう:
??? 1. 分業: MVC を使用すると、データベース開発、プログラムのビジネス ロジック開発、およびページ開発を分離できます。 。
??? ?ほとんどの人は MVC の利点について話しますが、それはこれに限定されています。 MVC は大規模なチームワークに役立つものにすぎないと私は信じています。実際、これは完全に間違いです。
??? 2. 疎結合。デザインパターンを理解していなければ、疎結合が何を意味するのかもわかりません。もちろん、簡単に説明します:
???? モジュール部分をデータベース抽象化層、データ操作層、ビジネス ロジック層に分割します。これは最も単純なビジネス アーキテクチャです。この分離の利点は何ですか?
??? データベース抽象化レイヤーは、通常、複数のデータベースをサポートします。この目的は、アプリケーションがデータベースを迅速に変更できるようにすることです。また、アプリケーションが他の種類のデータベースとやり取りすることも容易になります。
??? ?同時に、より強力に、大規模な Web サイトのサブデータベース操作とテーブルのサブ操作をサポートするリンク マネージャーが追加されます。
??? 一般に、データベース抽象化レイヤーは、ウィザードを通じて静的 ORM レイヤーを生成することも、動的 ORM レイヤー (これが最新の DRYSQL モードです) を直接提供することもできます。
??? ?しかし、ORM と CRUD に加えて、他のクエリもあります。 MVC では依然として、特別なデータ操作モジュールに MVC を書き込む必要があります。
???なぜこんなことをするのですか?これが疎結合です。ある部分を変更しても、他の部分には影響しません。
??? データ モジュールとビジネス モジュールを混在させた場合、ある日データベースを変更すると、巨大なモジュール部分のコードを変更する必要があることを想像してください。ただし、データ モジュールを独立させるには、データ モジュール部分の SQL ステートメントを変更するだけで済みます。
??? ?ビュー部分についても同様です。もともとPCブラウザ用に使われていたものなので、いつかモバイルページを追加したくなったら、それ以外はすべて共有するだけで済みますが、分離していない場合は新しく作成する必要があります。
??? この観点から、PHP はフレームワークの使用に適していないという人もいます。実際、多くの PHP はフレームワークなしでは動作しません。
??? ?目標は達成されており、問題がある場合は 1 か所を変更するだけで済むことがわかります。多くの場所を変更するのではなく。
??? 3. 共有と集中処理。コントローラーは、完全にオブジェクト指向の方法で設計されたプログラム フロー内のコンポーネントです。 PHP プログラムを記述する最も一般的な方法は、ヘッダーに SESSION モジュールが含まれ、その後にアクセス制御が続くということを覚えておいてください。ただし、ホスト名とサブドメイン名の制御を追加する場合は、含まれている各ページを再度含める必要があります。または、インクルード ファイルを SESSION モジュールまたはアクセス コントロール モジュールに追加します。その結果、プログラム ロジックは非常に複雑になります。エラーやジャンプがある場合、必然的にロードする必要のないページにジャンプします。
??? コントローラーの目的は、ページリクエストが最終的に必要なページに到達するようにすることです。そしてそれはオブジェクト指向プロセスに基づいています。
??? 通常: コントローラーにはホスト、サブドメイン、IP、URL、および ACL のルーティング検出が必要です。現在、Web サイトにはブラウザーと携帯電話の両方が存在するため、UserAgent の検出も必要です。コントローラーは、リクエストをモジュール クラスのメソッド (イベント) に最も簡単にマップできる必要があります。
??? 4. 完全なオブジェクト指向の MVC プログラム。ほとんどのプログラムにはクライアント要求エントリが 1 つだけあります (ブートストラップ)。多くの場合、アプリケーションはこのファイルに基づいて構成または変更されます。それ以外はすべてクラスです。つまり、クライアントからサーバーへのイベント マッピングが実装されます。この目的は、アプリケーション プロセスを完全にオブジェクト指向のプロセスに標準化することです。プログラムの可読性とプログラマの独立性を確保します。
??? 5. 現在人気のオープン API。優れた MVC アーキテクチャであれば、オープン API はデータ操作層インターフェイスを直接呼び出すことで実装でき、プログラム開発の量も大幅に節約され、知名度も向上します。コードの編集と処理に集中できるようになります。問題がある場合は、1 か所を変更するだけで済みます。
??? 6. 問題の表示: インターフェイスの要件は多様で常に変化するため、WEB モードのエンタープライズ アプリケーションではそのような変化が見られることがよくあります。残念ながら現在、PHP には .net や flex に似たビュー モードがまだありません。 Typstray や JFS などのコンポーネント指向のビュー モードを備えているのは JAVA だけであり、PHP には現在利用可能な成熟したオープン ソース製品がありません。 Smarty は Struts をコピーし、phpFACES は JFS をコピーしましたが、本質的には、PHP 言語の利点を十分に活用していませんでした。 phpFACES はさらに人気が低く、中国ではほとんど誰も使用していません。 FLAX RIA の影響と、JS フレームワークによってもたらされた新しい RIA テクノロジーは、バックエンド PHP と組み合わされていません。 JSP も遅れていますが、PHP も遅れています。人々は新しいオープンソースを必要としています。もちろん、phpFACES は DOJO をベースにして作成されたコンポーネントライブラリであるため、この分野の先駆者であると言えます。
??? 7. プラグイン技術: 優れた開発フレームワーク。すべての拡張はプラグインによって行う必要があります。しかし、現在プラグインをサポートしているフレームワークはどれだけあるでしょうか?公式の Zend はプラグイン構成ではなく、完全なセットであると言えます。これは純粋に技術的な誤解を招きます。もちろん、プラグインが最も多く、最も優れているのは symfony です。ただし、symfony の ORM は依然として Propel を使用しており、最新の DRYSQL テクノロジーを使用できません。プラグインに関する限り、多くの場合、ソフトウェアのアプリケーション、プロモーション、開発が制限されます。たとえば、有名な WordPress は完璧なアプリケーション プラグインを提供しますが、基礎となる開発フレームワークは非常に複雑です。最も単純なものは Mysql データベースにのみ使用できます。Oracle を使用したい人がいると、悪夢が始まります。したがって、優れたフレームワークはあらゆるレベルでプラグインをサポートする必要があります。プラグインは、データベース ドライバー プラグイン、データ モジュール プラグイン、キャッシュ ドライバー プラグイン、グラフィックス ライブラリ プラグインおよびその他の機能プラグインと、アプリケーション プラグインに大別できます。今日の時代では、プラグイン技術がなければ成功はありません。プラグインをサポートすることによってのみ無限の拡張を実現でき、多用途性は空論ではありません。しかし、国内の業界フォーラムを見る限り、プラグインインターフェースの実装技術に関する話題は見当たりません。 !
??? 8. 開発フレームワーク アーキテクチャ: WEB アプリケーション アーキテクチャの核となるのは、優れた開発フレームワークである必要があります。 アプリ オブジェクト、すべてを完了するためのエントリ ファイル、トランザクションの集約クラス、AutoLoader ローダー。 、uxConfig設定ファイル読み込み、uxLocaleローカリゼーション管理、モデルモデル、Viewビュー、Controllerコントローラー(ホスト、サブドメイン名、URI、UA、IP、ACLをすべてサポートする必要あり)、Exception ErrorHandleエラー例外管理あり、セキュリティセキュリティ管理(Validator)データ検証、フィルターデータフィルター)状態管理(セッションセッション管理、キャッシュキャッシュ管理)。次に、アプリケーションに必要な基本的なクラス ライブラリがあり、その中でデータベースが最初にランクされます。このアーキテクチャでは、データベースはカーネルではなくクラス ライブラリに配置されます。その理由は主に 2 つあります。1 つは、ユーザーがフレームワーク自体を使用するか、ADODB などのサードパーティを使用するかを選択できることです。 、教義、そして人々。次に、Web サイトの規模が変化する場合、データベース レベルでの変更が最も速くなります。しかし、現在、このような標準化されたアーキテクチャを持つ開発フレームワークがどれだけあるでしょうか?
??? このことから、MVC アーキテクチャ モデルにおけるさまざまな誤解は 2 つの側面から生じていることがわかりました。
??? 1 つは人々の理解によって引き起こされます。 PHP 開発チームの技術の遅れと品質の低さが重要な理由の 1 つです。ソフトウェア アーキテクチャ、特にオブジェクト指向の設計パターンを理解していなければ、MVC を深く理解することは不可能です。
??? これは、PHP 自体の開発にも関係しています。PHP4 より前は、オブジェクト指向はサポートされていませんでした。 PHP はそのシンプルさから多くのユーザーを魅了しています。しかし、大規模な Web サイト開発で使用されると、JSP が面倒でロックされていると感じる人にとっては悪夢が始まります。
??? 2 つ目は、PHP 開発フレームワークの開発とオープン ソース テクノロジの開発は密接に関係しているということです。同時に、開発フレームワークは MVC に対して十分なサポートを提供できません。オープンソースコンポーネントなので、人々は MVC をさらに理解できません。同様に、PHP の ADODB を使用する場合、プログラム内でデータ モジュールとビジネス モジュールを分離する必要はありません。これは建築家の責任です。しかし、中国の PHP 業界にはネットワーク アプリケーション アーキテクトが何人いるでしょうか?例えば、Agile Walk Shanghaiのイベントでは、杭州の大企業の外国人CTOが「PHPにはフレームワークは全く必要ない」と講演したが、これは国内PHP業界の技術的後進性を反映していると言わざるを得ない。現実はとても残酷です。ソフトウェア業界の現状を直視するしかない。
???
???

?

???

1階 115300111 2011-03-20
はい、とても同意します

2階 yuhao_1202 2011-03-27
悪くないよ。同意する。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

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.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles