ホームページ  >  記事  >  バックエンド開発  >  PHP フレームワークにおける MVC アーキテクチャの分析 (例付き)

PHP フレームワークにおける MVC アーキテクチャの分析 (例付き)

不言
不言転載
2019-03-13 14:02:453007ブラウズ

この記事の内容は、PHP フレームワークにおける MVC アーキテクチャの分析に関するものです (例付き)。一定の参考価値があります。必要な友人が参照することができます。お役に立てれば幸いです。

MVC アーキテクチャについて話す前に、まず PHP フレームワークについて話しましょう。 PHP 言語を学習した多くの人は、さまざまな PHP フレームワークに直面します。 TP、Yii、CI、そして非常に人気のあるlaravelなどはどうでしょうか。

彼らのほとんどは、MVC アーキテクチャに基づいていると言うでしょう。そして、MVC のロジックを理解し、このロジックを使用して Web サイトを構築しようとする必要があります。そして、彼らは次のように言うでしょう。 MVC は本当に美味しいです~

インタビュー

多くの PHP インタビューでは、MVC の意味やこのアーキテクチャをどのように理解するかなど、MVC に関する質問がされることがあります。しかし、モデルはデータベースのテーブル構造に相当するモデル、ビューはページに相当し表示に使用され、コントローラーは主に各種ロジックを記述したり、データとページ表示を関連付けるために使用される、と理解している人も多いでしょう。

上記の答えは基本的には問題ありませんが、Web サイトの構造は本当に単純なのでしょうか?明らかにそうではありません

デザイン

話をする前に、まずデザイン パターンの 1 つであるメディエーター パターンを理解しましょう。明確に理解できるのは、香港銀行プラグと国立銀行プラグの間のアダプターです。

MVC アーキテクチャでは、コントローラーはこのアダプターです。モデル内のデータをビューに転送することのみを担当し、訪問者はモデルに保存されている実際のデータを見ることはできません。別の観点から見ると、この中間モデルは、2 つのデータ層間の友好的な通信を促進できます。

ピットに登る

このモデルは本当に優れていますか?ビジネス ロジックがますます複雑になると、コントローラー内のコードがますます多くなり、冗長なコードを調整して最適化する必要さえなくなるでしょう。

しかし、マクロの観点から見ると、Web サイトにはリクエスト、フォーム、ページが増えただけで、他には何もありません。これはなぜでしょうか?

そうです、あれやこれやが多くてコントローラー内の各メソッドが非常に長くなってしまうため、解決策としては分割することが考えられます。

Yii フレームワークを使用したことがある場合は、リクエスト フォーム レイヤーを追加するのが最も簡単な方法であることがわかります。コードは次のとおりです:

class AuthController {
    public function login() {
        $FLogin = new loginForm();
        $FLogin->save();
    }
}

// 一般在独立的文件夹中
class loginForm {
    public function __construct() {
        $post = $_POST;
    }
    
    public function save() {
    }
}

上記は問題を解決するためのものです。コントローラーのフォームのこの問題 基本的に、これにより多くのコーディング上の問題が軽減されます。

divergence

フォーム層を解決するという観点から見ると、解決できる同様の問題が実際にたくさんあります。フロントエンドには vue.js と呼ばれるフレームワークがあり、MVVM モデルと呼ばれる概念について言及していることがわかります。

実際、複雑なページを表示する場合、バックエンドは外部にデータを出力するときにこれを使用してデータを出力することもできます。このようなモデルをどのように構築するかについては、ビジネス ロジックによって異なります。

これは、ユーザー センターの簡単な例です。多くの場合、ここでは 1 つのテーブルのデータだけではなく、複数のデータが必要になるためです。

class AuthController {
    public function userCenterAction() {
        return new userVM();
    }
}

class userVM {
    public $user;
    public $orders;
    public $other;

    public function __construct() {
        $this->user = $this->getUser();
        $this->orders = $this->getOrders();

        $this->handle();
    }

    private function getUser() {
        return NULL;
    }

    private function getOrders() {
        return NULL;
    }

    private function handle() {
    }
}

上記のコードには、VM 層があり、コードデータを取得するためのメソッドをそれぞれのメソッドに配置し、ハンドルメソッド内で自由に組み合わせることができます。こうすることで、コントローラー内のコードの管理も非常に簡単になります。

もう一度考えてみてください。カプセル化できる他のレイヤーはありますか?実際には、リクエスト層、フレームワークによってカプセル化されることが多い検証層、laravel で人気のミドルウェア層など、いくつかの層があります。システムが複雑になればなるほど、層が増えるとしか言えません。

あらゆる複雑なシステムの背後には、上級開発エンジニアやアーキテクトの設計アイデアが隠れています。ここまで述べてきましたが、読者がこれらのことを理解できるかどうかはわかりませんが、上記のコードを例として挙げると、このコードにはビルダー パターンという別の設計パターンが含まれています。

概要

コードをたくさん書くと、その背後にある真実がわかるようになります。新しいフレームワークが生まれると、そのフレームワークを学ぶことから、そのフレームワークがどのように設計され、どのような問題を解決するのかということに徐々に焦点が移っていきます。より優れたテクノロジーや手法が使用される場所、そしてそこから何が得られるか。ところどころにデザインのアイデアはあるのか、もっと良いデザインはないのか、なぜ自分は思いつくのに相手は思いつかないのか、何か見落としがあるのではないか、などなど。

過去数年間、私は CI から Symfony に至るまで、さまざまな PHP フレームワークを使用してきました。多くのフレームワークを使用しないと、これらのことを体験することはできません。プログラミングの学習も実は英語と同じで近道はありません。

もっと書いて、もっと考えて、もっと練習して…

以上がPHP フレームワークにおける MVC アーキテクチャの分析 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。