浅析MVC

作者: 饥人谷_折纸大师 | 来源:发表于2022-08-11 11:12 被阅读0次

MVC是什么

每一个模块可以写成三个对象,分别是M、V、C
M——Model(数据模型),负责操作所有数据
V——View(视图),负责所有UI界面
C——Controller(控制器),负责其他

其中涉及到的一些抽象思维

  • 抽象思维1
    最小知识原则
    引入一个模块需要引入HTML、CSS、JS
    需要知道的东西越少越好,模块化为这一点奠定了基础
    但是这样做刚开始页面会是空白的,没有内容没有样式
    可以添加载入动画或者骨架图或者站位内容
  • 抽象思维2
    以不变应万变
    每个模块都可以用m+v+c来写,每个模块都这样写,不用思考类似需求怎么写了
    但是有时会有多余用不到的代码,遇到特殊情况时难以变通
  • 抽象思维3
    view = render(data)
    比起操作DOM对象,直接render更为容易,只要改变data就能得到对应的view
    但是render渲染会比DOM更加浪费性能
  • 抽象思维4
    表驱动编程
    表指的是哈希表
    表驱动编程可以减少重复代码,只讲重要的信息放在表里,然后利用表来编程(数据结构)
  • 抽象思维5
    事不过三
    同样的代码写三遍,应该抽成一个函数
    同样的属性写三遍,应该做成共有属性(原型或类)
    同样的原型写三遍,应该用继承
  • 抽象思维6
    俯瞰全局
    eventbus 负责事件通信
    把所有的对象看成点,实现点与点的通信

Model:是应用程序中用于处理应用数据逻辑的部分。
用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,会有一个或多个视图监听此模型。一旦模型数据发生变化,模型将通知有关视图。

const m = {
  data: {数据A},
  create() {},
  delete() {},
  update(data) {
        Object.assign(m.data,data)//用新数据替换旧数据
        eventBus.trigger('m:update')//eventBus触发'm:update'信息,通知View刷新界面
},
  get() {数据A}
}

View:是应用程序处理应用数据显示的部分。
它是在屏幕上面表示,描绘的是Model当前的状态。当模型的数据发生变化,相应的得到刷新自己的机会。

const v = {
  el: 需要刷新的元素,  
  html: `
       body里面的内容
`,
  init(container) {
    v.el = $(container)
  },
  render(n) {刷新页面}
}

Controller:是应用程序处理人机交互的部分。
Controller定义用户界面对用户输入的响应式,起到不同层面间的组织作用,用于控制应用程序的流程,它处理用户的行为和数据Model上的变化。

const c = {
  init(container) {
        v.init()//初始化View
        v.render()//第一次渲染页面
        c.autoBindEvents()//自动的事件绑定
        eventBus.on('m:update',()=>{v.render()}//当enentsBus触发'm:update'是View刷新
    },
  events: {},   //事件以哈希表的方式记录存储
  add() {},
  minus() {},
  mul() {},
  div() {},
  autoBindEvents() {自动绑定事件}
}

EventBus

  • on : 监听事件
  • trigger(emit) : 触发事件
  • off : 取消监听
    用于模块间的通讯,view组件层面,父子组件、兄弟组件通信都可以使eventbus处理。
const eventBus = $(window)
eventBus.trigger('m:update') // 自动触发事件update
eventBus.on('m:update', () => {console.log('触发';)}) //监听事件 然后执行函数


表驱动编程

表驱动编程的意义在于逻辑与数据的分离

表驱动方法是一种使你可以在表中查找信息,而不必用逻辑语句(if 或 case)来把他们找出来的方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。但随着逻辑链的复杂,表就变得越来越富于吸引力了。

使用if-else

function translate(term) {
    if (term === '1') {
        return '一'
    } else if (term === '2') {
        return '二'
    } else if (term === '3') {
        return '三'
    } else {
        return '???'  
    }
}

// 如果想添加一个新的名词翻译,需要再添加一个if-else逻辑,例如:
function translate(term) {
    if (term === '1') {
        return '一'
    } else if (term === '2') {
        return '二'
    } else if (term === '3') {
        return '三'
    } else if (term === '4') {   
        // 此处添加了一个新的名词翻译
        return '四'
    } else {
        return '???'  
    }
}

如果使用表

function translate(term) {
    let terms = {
        '1': '一',
        '2': '二',
        '3': '三'
    }
    return terms[term];
}

// 如果想添加一个新的名词翻译,只需要在terms中添加一个新的表项,不需要修改整个逻辑
function translate(term) {
    let terms = {
        '1': '一',
        '2': '二',
        '3': '三'
        '4': '四'   // 添加一个新的名词翻译
   
    return terms[term];
}

显而易见,容易了很多。根本不用修改代码逻辑。


模块化的理解

  • 模块化可以避免阻断。每个模块之前互相独立,互不影响,削弱了不同模块之间的联系,不影响其他模块的调用,此外其中一个模块产生了bug也不会影响到其他模块。这样子可以更好的优化和重构代码,方便维护。
  • 如果是多人协作开发,模块化可以有效避免代码覆盖和冲突的问题。

相关文章

  • MVC 浅析

    MVC 一、MVC的概念 MVC是Model-VIew-Controller,就是模型-视图-控制器,这些都是什么...

  • Mvc浅析

    定义 Modle是数据模型,用于操作数据,一般结构如下: View是视图,负责所有的UI页面,一般结构如下; Co...

  • 浅析 MVC

    MVC是什么 MVC——用于解决页面代码过于重复的一个的设计模式(优化页面代码结构)。首先:MVC没有严格的定义。...

  • 浅析 MVC

    一、什么是MVC? M是modal(数据模型)的简称,它是用于操作所有数据 V是view(视图)的简称,它是用于负...

  • 浅析 MVC

    一、MVC是什么? MVC是一种设计模式(那设计模式又是什么呢?简单粗暴的说好用的东西就是设计模式),MVC能够使...

  • 浅析 MVC

    1MVC 三个对象分别做什么,给出伪代码示例 M-Model (数据模型),负责操作所有数据. V-View (视...

  • 浅析MVC

    一、MVC是什么? M 就是 model, 即数据模型,负责数据相关的任务,包括对数据的增删改查 V 就是view...

  • 浅析MVC

    M V C分别是什么 M:即model,数据层面,该模块封装数据以及对数据的处理方法 V:即view,视图层面,该...

  • 浅析 MVC

    一、 MVC 设计模式 1. 设计模式 设计模式,是通用代码(组织方式)的一种统称 2. MVC 是什么 MVC ...

  • 浅析MVC

    MVC没有严格的定义,M - Model(数据模型,负责封装数据以及数据的处理方法) V - View(视图,负责...

网友评论

      本文标题:浅析MVC

      本文链接:https://www.haomeiwen.com/subject/tdpxgrtx.html