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インデックス機能を最適化する方法

推薦する

nestjs における例外フィルター Exceptionfilter の具体的な使用法

Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...

Linux の daily_routine サンプルコードの詳細な説明

まずサンプルコードを見てみましょう: #/bin/bash cal 日付 -u echo "...

Vue3.0 手書きカルーセル効果

この記事では、Vue3.0の手書きカルーセル効果の具体的なコードを参考までに共有します。具体的な内容...

mysql データはどこに保存されますか?

MySQLデータベースの保存場所: 1. MySQLがMyISAMストレージエンジンを使用する場合...

MySQLのどのフィールドがインデックスに適しているかについての簡単な説明

目次1 データベース インデックスを作成するための一般的なルールは次のとおりです。 2. 数千万件の...

jsはショッピングカートの加算と減算、価格計算を実装します

この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...

Vue での props の使い方の紹介

序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...

JavaScript で実装された 7 つのソート アルゴリズムの概要 (推奨!)

目次序文バブルソート基本アルゴリズム2 番目の書き方は、基本的なアルゴリズムに基づいて改良されていま...

Navicat の MySQL へのリモート接続が遅い理由の詳細な説明

最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...

Vueコンポーネントが相互に値を転送する方法の詳細な説明

目次概要1. 親コンポーネントが子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに...

手書きの Vue2.0 データハイジャックの例

目次1: webpackをビルドする2. データハイジャック3: まとめ1: webpackをビルド...

フレックスボックスレイアウトの最終行の左揃えの実装アイデア

フレックスレイアウトを使用すると、9つの正方形のグリッドであれば、図に示すように均等に分割できます。...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明

質問前回のクロスドメイン リソース共有に関する記事では、ドメイン間で Cookie を送信する場合、...

MySQLのREDOログとUNDOログの詳細な説明

MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...