MVVM思想、MVCとの区別、およびMVVMフレームワークとVUEコードとの対応関係

6652 ワード

MVVM
定義:MVVMは、Model-View-View Modelの略、すなわちモデル-ビュー-ビューモデルです.
モデル(Model):バックエンドで渡されるデータを指します.
ビュー(View):表示されるページを指します.
ビューモデル(ViewModel):viewとmodelをつなぐブリッジであるmvvmモードのコア.2つの方向があります(DOMイベントのリスニングを実現します):
   1. modelをviewに変換する(バックグラウンドで渡されたデータをユーザが見たページに変換する).viewをmodelに変換(表示するページを変換)
ポイント:この2つの方向が同時にデータと呼ばれる双方向バインドを実現する場合.
まとめ:MVVMのフレームワークの下でビューとモデルは直接通信することができなくて、それらはView Modelを通じて通常1人のobserver観察者を実現しなければならなくて、データが変化する時、View Modelはデータのこのような変化を傍受することができて、それから対応するビューに自動的に更新することを通知して、ユーザーがビューを操作する時、View Modelもビューの変化を傍受することができて、その後、データの変更を通知することで、実際には双方向バインドが実現されます.
MVC(バックグラウンド用が多い)
定義:MVCはModel-View-Controllerの略記、すなわちモデル-ビュー-コントローラであり、MとVの意味はMVVMのMとVの意味と同様であり、Cはページのビジネスロジックを指す.
  MVCを使用する目的はMとVのコードを分離することであり,MVCは一方向通信,すなわちViewとModelであり,Controllerによって上から下へ引き継ぐ必要がある.
MVVMとMVCの違い
 MVVMとMVCの違いはVMが完全にCに取って代わったわけではない.ViewModelの存在の目的は、Controllerに示されているビジネスロジックを抽出することであり、Controllerに取って代わるのではなく、他のビュー操作はControllerに置くべきであり、つまりMVVMが実現するのはビジネスロジックコンポーネントの再利用である.  MVCの出現時間が比較的に早いため、フロントエンドはそんなに成熟していないで、多くの業務ロジックもバックエンドで実現して、だからフロントエンドは本当の意味でのMVCモードがありません.
MVVMフレームワークとVUEコードの対応関係
注意:ここは皆さんに見てもらいやすいので、vueを直接引用します.js、プレゼンテーションができます.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
  	<!-- 1.  Vue  -->
    <!--       Vue   window      Vue     -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <!-- 2.HTML     Vue   -->
    <!--    new    Vue      div  ,  MVVM  View  -->
    <div id="app">
        <p>{{msg}}</p>
    </div>

    <script>
        // 3.  Vue   
        // const vn = new Vue({    })
        //   ,new Vue()   vm  ,  MVVM  VM,         (   )

        const vm = new Vue({
            el:'#app',//element    ,el       vm              
            data:{//           
                //  new Vue    ,        ,data       ,  MVVM  Model
                msg:'Hello XiaoMeiZi!'

            }
        })
    
    </script>
</body>
</html>