MVC—— 高效的软件架构模式

997 阅读3分钟

MVC到底是什么

MVC是一种在编程世界中广泛应用的设计模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

  • M-Model:负责操作所有数据;
  • V-View:负责所有UI界面;
  • C-Controller:负责转发请求,对请求进行处理。

MVC没有严格的定义,每个程序员对MVC的理解都不一样,但对着三个名字是没有分歧的。 伪代码如下:

const m = {//数据层,关于数据的操作放在这里
    data:{
        n:parseInt(localStorage.getItem('number')||100)
    },//数据初始化
    update:function (data) {
        //更新数据的方法
    },
    delete:function (data) {
        //删除数据的方法
    },
    get:function (data) {
        //获得数据的方法
    }
}
const v = {//视图层,关于视图的操作放在这里
    el:'挂载点',
    html:'需要插入元素内的HTML内容',
    render('渲染html')
}
const c = {//控制层,关于事件监听的放到这里
    //找到重要的元素绑定事件
    //如果触发事件调用更改数据方法及渲染方法
    const a =$('找到A')
    const b = $('找到B')
    b.on('click',function(){
        //调用数据层方法更改数据
        //调用视图层方法渲染页面
    })
}

EventBus

1. 定义及作用

EventBus 又称为事件总线。在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的灾难,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。

2. 如何使用

  • 定义事件
public class MessageEvent { /* Additional fields if needed */ }
  • 准备订阅
EventBus.getDefault().register(this);
public void onEvent(AnyEventType event) {/* Do something */};
  • 发布事件
EventBus.getDefault.post(event);

表驱动编程

所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值。

我们平时查字典以及念初中时查《数学用表》找立方根就是典型的表驱动法。在数值不多的时候我们可以用逻辑语句(if 或case)的方法来获取值,但随着数值的增多逻辑语句就会越来越长,此时表驱动法的优势就显现出来了。 它的意义在于:

  • 逻辑与数据分离
  • 逻辑修改成本巨大,数据修改成本极小
  • 数据来源灵活,数据改变灵活

如何理解模块化

1. 什么是模块化

  • 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起;
  • 模块的内部数据与实现是私有的,只是向外部暴露一些接口(方法)与外部其它模块通信。

2. 模块化的好处

  • 避免命名冲突(减少命名空间污染)
  • 更好的分离, 按需加载
  • 更高复用性
  • 高可维护性

3. 模块化的特点

  • 所有代码都运行在模块作用域,不会污染全局作用域。
  • 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
  • 模块加载的顺序,按照其在代码中出现的顺序。