Web インタビュー: MVC と MVVM の違いと、Vue が MVVM に完全に準拠していない理由

Web インタビュー: MVC と MVVM の違いと、Vue が MVVM に完全に準拠していない理由

MVCとMVVMの違い

前述の

まず、これら2つは単なる考え、デザインパターンです

多くのプログラミング言語では、Java の SpringMVC、PHP の ThinkPHP、JavaScript の Vue、React、Angular など、この考えに基づいて多くのフレームワークが設計されています。

MVCC の

概要

1. データはビューにレンダリングされる必要がある
テンプレートエンジンの定義
データを取得する
次にデータをテンプレートエンジンにレンダリングします

2. ビューアクションコントローラ
ページ上のボタンにクリックイベントを追加する
イベント内でのメソッドの呼び出し
コントローラはデータを変更する要求を送信します

3. メソッドを通じてデータを変更するネットワークリクエストを送信する
次に、変更されたデータを取得するためにネットワークリクエストを送信します。
次にデータをビューにレンダリングします

長所と短所

アドバンテージ:

結合を減らし、コードの保守と拡張を容易にする

欠点:

データが更新されるたびに DOM を操作する必要があり、開発効率に影響します。

MVVM

概要

序文

開発効率を向上させるために、MVVM という新しいアイデアが登場しました。最大の特徴は双方向データバインディングです。

M のデータが変更されると、V のデータも自動的に変更されます。V のデータが変更されると、M のデータも自動的に変更されます。

MVVM は MVC の進化版であり、MVC の代替です。

特徴:

Mが変わると、Vも自動的に変わるVが変わると、Mも自動的に変わる

関係:

Mが変更されると、VMはMの変更を検出し、Vを自動的に変更します。

Vが変化すると、VMはVの変化を検出し、Mを自動的に変更します。

MVVH を使用すると、すべての DOM 操作が VM によって実行されるため、プログラマーの作業負荷が軽減されます。プログラマーは、DOM 操作ではなくビジネス ロジックに多くの時間を費やすことができます。

MVVM 実装者 — Vue

ここに画像の説明を挿入

Vue が MVVM に完全に準拠していないのはなぜですか?

ここに画像の説明を挿入

元の言葉はVue公式サイトの著者の声明から来ていますが、著者は理由を述べていません。私自身の調査と整理によると、理由は2つあると思います

理由 1: MVVM は「Model-View-ViewModel」を参照し、「モデル」と「ビュー」を完全に分離する必要がありますが、Vue は ref プロパティを提供しており、これを通じて DOM オブジェクトを取得し、ビューを直接操作できます。これは mvvm に違反します。

理由2:下図に示すように、構造上、「データ層」は「データモデル層」に含まれており、2つの部分は完全に独立していません。

ここに画像の説明を挿入

以上がWeb面接におけるMVCとMVVMの違いと、VueがMVVMに完全準拠していない理由の回答の詳しい内容です。MVCとMVVMの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • Vue.js と MVVM に関するメモ
  • Vue における MVVM 実装原理の簡単な分析
  • JavaScript フロントエンド開発の MVC と MVVM 構造についての簡単な説明
  • vue の mvvm モードの説明
  • VueにおけるMVVMの原理と実装方法の詳細な説明

<<:  UA による Web サイトのクロールを防ぐ Nginx のクローラー対策戦略

>>:  Explainキーワードに基づいてMySQLインデックス機能を最適化する方法

推薦する

VMware Workstation と vSphere 間で仮想マシンを移行する (画像とテキスト)

1. Workstationで仮想マシンのハードウェアバージョンを変更するWorkstation ...

MySQL 8.0.16 Win10 zip バージョンのインストールと設定のグラフィック チュートリアル

この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...

HTMLのインライン要素とブロックレベル要素とは何か、またそれらの違いは何ですか

以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...

MySQL でシンプルな検索エンジンを実装するためのサンプルコード

目次序文導入ngram全文パーサー全文インデックスを作成する検索方法1. 自然言語検索(自然言語モー...

DockerにrockerChatをインストールし、チャットルームを設定するための詳細な手順

包括的なドキュメントgithubアドレスhttps://github.com/RocketChat/...

MySQL アーキテクチャのナレッジポイントの概要

1. データベースとデータベースインスタンスMySQL の研究では、データベースとデータベース イン...

Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴

最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...

MySQL マスタースレーブ同期における server-id の例の詳細な説明

序文MySQL クラスターを構築する場合、当然のことながら、データの一貫性を確保するために、データベ...

MySQLテーブルの内容の変更を監視し、MySQL binlogを有効にする

序文binlog は、MySQL のすべての追加、削除、および変更ステートメントを記録するバイナリ ...

MySQL全文インデックスを使用して検索エンジンのサンプルコードの簡易版を実現する

序文全文インデックスを使用できるのは Innodb と MyISAM ストレージ エンジンのみです ...

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要su スイッチ ID: su –l ユーザー名 –c 'コマンド&#...

CSS グリッドレイアウトを使用してレスポンシブな縦棒グラフを作成する方法

私はしばらくの間チャートをいじっていましたが、好奇心から、CSS を使用してチャートを作成するより良...

Vueはキャンバスを使用して画像圧縮アップロードを実現します

この記事では、キャンバスを使用して画像圧縮アップロードを実現するVueの具体的なコードを参考までに共...

Windows 10 Home Edition に Docker for Windows をインストールする

0. 背景ハードウェア: Xiaomi Notebook Air 13/Inter Core i7-...

WeChatアプレットのオーディオコンポーネントがiOSで再生できない問題の解決策

解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...