HTML怎么做MVP模式_html MVP设计模式实现方法【一文搞懂】

老静姑娘_7441

老静姑娘_7441

2026-05-16

290人浏览

原创

真正可维护的mvp需补全model层、view接口、presenter依赖注入三块:model为纯js对象,view提供render/clear等抽象方法,presenter仅接收view和model实例,彻底解耦dom操作。

html怎么做mvp模式_html mvp设计模式实现方法【一文搞懂】

纯 HTML + 原生 JS 或 jQuery 实现 MVP,本质是人为划分职责,不是靠框架自动绑定;没有 Model 层的“空壳 MVP”很常见,但真要落地,Presenter 必须能解耦 View 和 Model 的直接依赖,否则只是披着 MVP 外衣的事件脚本。

为什么 jQuery 项目里常写成“假 MVP”

多数示例(比如你看到的 Page 构造函数)只实现了 View → Presenter 的调用链,Presenter 直接操作 DOM、拼接字符串、清空输入框——这其实是把 View 的逻辑硬塞进了 Presenter,Model 彻底缺席。

  • Presenter 里出现 $('#inputValue').val() 或 ul.append(...):说明它在干 View 的活,违反 MVP 的“Presenter 不持有 DOM 引用”原则
  • 所有数据都来自表单实时读取、无缓存、无校验、无异步加载:意味着根本没有独立 Model 实体,data 就是临时变量
  • 测试困难:因为 Presenter 方法强依赖 jQuery 对象,无法脱离浏览器环境单元测试

真正可维护的 MVP 要补哪三块

补全 MVP 不需要重写整个项目,从现有代码里拆出三个明确边界即可:

Html2md
Html2md

使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...

下载
  • Model 层:定义为纯 JS 对象或类,只暴露 getData()、saveItem(item)、onDataChange(callback) 这类方法,内部不碰 document 或 $
  • View 接口:不是 DOM 元素本身,而是抽象方法集合,如 renderList(items)、clearInput()、showError(msg);Presenter 只调这些方法,不关心它们怎么实现
  • Presenter 初始化时只接收 View 实例和 Model 实例:例如 new TodoPresenter(new TodoView(), new TodoModel()),彻底切断对选择器的硬编码依赖

jQuery 环境下避免 DOM 泄露的关键写法

在仍用 jQuery 的老项目中,让 Presenter 不直接操作 DOM,核心是把 DOM 操作收口到 View 类里:

class TodoView {
  constructor() {
    this.$input = $('#inputValue');
    this.$list = $('#ul');
    this.$btn = $('#btn');
  }
  getInputValue() { return this.$input.val(); }
  clearInput() { this.$input.val(''); }
  renderList(items) {
    this.$list.empty();
    items.forEach(item => this.$list.append(`
  • ${item}
  • `)); } bindAddHandler(handler) { this.$btn.on('click', handler); } } class TodoPresenter { constructor(view, model) { this.view = view; this.model = model; this.init(); } init() { this.view.bindAddHandler(() => this.handleAdd()); } handleAdd() { const value = this.view.getInputValue(); if (value.trim()) { this.model.addItem(value); this.view.clearInput(); this.view.renderList(this.model.getItems()); } } }

    这样改完后,Presenter 里再不会出现 $ 符号;所有 jQuery 调用被限制在 TodoView 内部,替换为原生 JS 或 Vue 只需重写这个类,Presenter 和 Model 完全不动。

    容易被忽略的边界问题

    MVP 在 HTML 场景中最容易模糊的是错误处理与副作用时机:

    • Model 抛错时,Presenter 应捕获并转成 view.showError(),而不是在 Model 里直接 alert() 或操作 DOM
    • View 的 renderList() 方法应完全同步,不包含动画、延迟或请求;异步加载逻辑属于 Presenter 协调,但具体 fetch 调用应封装进 Model
    • 如果页面有多个 View(比如列表页 + 详情弹窗),Presenter 需持有多个 View 实例,但每个 View 仍只负责自己那块 DOM —— 切忌让一个 View 方法去更新另一块区域

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.14

    6395

    7

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    2023.06.21

    3572

    4

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.31

    3250

    5

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.01

    3259

    5

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2023.08.11

    4959

    6

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    2023.08.11

    3201

    3

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    3009

    3

    html文本框代码怎么写
    html文本框代码怎么写

    html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

    2023.09.01

    2648

    6

    HTML嵌入CSS样式的方法
    HTML嵌入CSS样式的方法

    HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

    2023.09.20

    2728

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    GDB 17.2 官方文档集合
    GDB 17.2 官方文档集合

    共0课时 | 0人学习

    Bootstrap 入门安装配置
    Bootstrap 入门安装配置

    共0课时 | 0人学习

    38+ PhpStorm 提示和技巧
    38+ PhpStorm 提示和技巧

    共1课时 | 224人学习