前端MVP开发模式

导读:本篇文章讲解 前端MVP开发模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

MVP开发模式

身为前端开发,我相信大家对MVVM模式是相当熟悉的,但是在MVVM模式之前,大家有没有思考是什么样的开发模式呢
没错,是MVP,对,一个很神奇的名字,也很好记
那么,MVP模式都有哪些层呢,它和MVVM的区别又是什么呢

什么是MVP模式

在这里插入图片描述

MVP模式是通过分离Model、View、Presenter的方式组织代码。 View负责页面的显示逻辑;
Model负责存储页面的业务数据以及对相应数据的操作;
Presenter将View层的变化与Model层的变化绑定在一起,当用户与页面产生交互的时候,View和Model可以进行同步的更新。
MVP中的presenter同时具有View和Model的接口。 Presenter作为一个中转站,view中的变化先传到Presenter
Presenter传到Model中 对Model中的数据进行更改 再通过Presenter将数据更新到view层中

这个就是MVP模式的官网图
其实我们发现,它和MVVM一样,都是三层,但是我们知道,MVVM的VM层不需要我们去操作,它是Vue自己操作的,当然,关于VM层的底层原理,我们知道Vue2的Object.defineProperty,也知道Vue3中的proxy,这里就不过多叙述了

需要注意的是,在MVP的三层中,我们都是需要进行操作的,而且大量地操作了DOM,这也是MVP和MVVM最明显的区别了

那么,MVP是用什么去操作实例呢,当然不是vue.js了哈
是我们的老朋友,jquery

MVP代码实例

<body>
  <div>
    <input type="text">
    <button id="btn">提交</button>
    <ul></ul>
  </div>
  <script>
    function Page() { }
    $.extend(Page.prototype, {
      init: function () {
        this.bindEvents()
      },
      bindEvents: function () {
        var btn = $('#btn')
        btn.on('click', $.proxy(this.handleBtnClick,
          this))//proxy是jquery的一个方法,可以改变this指向
      },
      handleBtnClick: function () {
        alert('123')
      }
    })
    var page = new Page()
    page.init()
  </script>
</body>

没错,我们用了jquery的一些api,我们知道jquery80%以上都是用来操作DOM的,也有一部分可以操作Ajax,但是它还是有别的作用的哈!

以上的代码是一个测试的demo,下面的就是一个很简单的TodoList的例子了

<body>
  <div>
    <input id="input" type="text">
    <button id="btn">提交</button>
    <ul id="ul"></ul>
  </div>
  <script>
    function Page() { }
    $.extend(Page.prototype, {
      init: function () {
        this.bindEvents()
      },
      bindEvents: function () {
        var btn = $('#btn')
        btn.on('click', $.proxy(this.handleBtnClick,
          this))
      },
      handleBtnClick: function () {
        var inputValue = $("#input").val()
        var ulElem = $("#ul")
        ulElem.append('<li>' + inputValue + '</li>')
        $("#input").val('')
      }
    })
    var page = new Page()
    page.init()
  </script>
</body>

它可以实现什么效果呢
在这里插入图片描述
在这里插入图片描述
这就是它的效果了,大家在最开始学习Vue的时候,应该都做过类似的效果,在这里,就是想说MVP模式,也可以做到MVVM的效果

M:模型,在这个代码里不涉及Ajax,所以不涉及M层
V:视图
P:控制器

但是,缺点也相当地明显,它频繁地操作了DOM,这不是我们想要的,所以它慢慢地被MVVM取代了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79709.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!