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

推薦する

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

Linux 上での MySQL データベースのリモート展開の詳細な手順

LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...

HTMLの基本タグと構造の詳細な説明

1. HTMLの概要1.HTML: ハイパーテキスト マークアップ言語。これはプログラミング言語では...

jsはブラウザを閉じるときにアカウントのログアウトを処理します

目次古典的なアプローチ質問その他の質問注意が必要な問題古典的なアプローチご存知のとおり、アカウントの...

MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続

落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...

Mysqlのprepare前処理の具体的な使用法

目次1. 前処理2. 前処理塗布方法A. 例: B. 実行計画の変更を追跡するための前処理C. スト...

Dockerで構築されたコンテナにpingツールをインストールする

Centos や Ubuntu など、Docker が pull する Base イメージは最もシン...

XHTML CSS ページをプリンタ ページに変換する

<br />これまで、Web ページのプリンタ対応バージョンを作成するには、印刷したとき...

Vue.set() と this.$set() の使い方と違い

開発に Vue を使用する場合、次のような状況に遭遇することがあります。Vue インスタンスを生成し...

CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

Web デザインでよく耳にするプロパティ名: content、padding、border、marg...

Mongodb の GUID 表示の問題の詳細な分析

問題を見つける最近、プログラムのストレージを Mongodb に移行したところ、Guid 型が書き込...

MySQL 5.x 以降を使用している場合のエラー #1929 列 ''createtime'' の日付時刻値が正しくありません: '''' の簡単な解決方法

MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...

LinuxベースのLVMシームレスディスク水平拡張の詳細な説明

環境名前財産CPU 5650 円メモリ4Gディスク20G+4TB この時点で、サーバーにはすでに次の...

JSはタイムラインの自動再生を実現する

最近、次のような効果を実装しました。再生ボタンをクリックするとタイムラインの再生が開始され、一時停止...