浅析MVP

1. MVC 三个对象分别做什么,给出伪代码示例

M: Model(数据模型)负责操作所有数据

```

const m = { 

  data: {},

  create() { },

  delete() { },

  update() { },

  get() { }

}

```

V: View(视图)负责所有UI界面

```

const v = {

    el: null,

    html: `代码`,

    init(container) {

        v.el = $(container)

    },

    render(n) { }

}

```

C: Controller(控制器), 负责除了M和V的事情的其他事情

```

const c = {

    init(container) { },

    events: { },

    add() { },

    minus() { },

    mul() { },

    div() { },

    autoBindEvents() { }

}

```

2. EventBus 有哪些 API,是做什么用的,给出伪代码示例

EventBus可以称作观察者设计模式,在Android下可以高效的发布/订阅事件。作用是可以代替传统Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法。解决模块之间通信的问题,view组件层面,父子组件、兄弟组件通信都可以使用Eventbus处理。特点就是代码简洁。

DOM 的事件机制就是发布订阅模式最常见的实现,这大概是前端最常用的编程模型了,监听某事件,当该事件发生时,监听该事件的监听函数被调用。EventBus就是实现发布订阅模式的一种方法。

EventBus 基本的 API 有 on (监听事件), trigger (触发事件), off (取消监听)方法。

```

{

  constructor(){

        this._eventBus =$(window)

    }

    on(eventName, fn){

        return this._eventBus.on(eventName,fn)

    }

    trigger(eventName,data){

        return this._trigger.tiggger(eventName,data)

    }

    off(eventName, fn){

        return this._eventBus.off(eventName,fn)

    }

}

export default EventBus

```

3.什么是表驱动编程

表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链的越来越发杂,查表法也就愈发显得更具吸引力。简单来说就是减少重复代码

```

bindEvents(){

    v.el.on('click','#add1',()=>{

    m.data.n +=1

    v.render(m.data.n)

    })

    v.el.on('click','#minus1',()=>{

    m.data.n-=1

    v.render(m.data.n)

    })

    v.el.on('click','#mul2',()=>{

        m.data.n*=2

        v.render(m.data.n)

    })

    v.el.on('click','#divide2',()=>{

        m.data.n/=2

        v.render(m.data.n)

    })

}

```

表驱动编程改写为:

```

events:{

    'click #aa1':'add',

    'click #minus1':'minus',

    'click #mul2':'mul',

    'click #divide2':'div'

},

add(){

    m.update( data: {n:m.data.n +1})

},

minus(){

    m.update( data:{n:m.data.n -1})

},

mul(){

    m.update( data: {n:m.data.n *2})

},

div(){

    m.update(data: {n:m.data.n /2})

}

```

4. 如何理解模块化的

模块化(modular)编程,是强调将计算机程序的功能分离成独立的、可相互改变的“模块”(module)的软件设计技术,它使得每个模块都包含着执行预期功能的一个唯一方面(aspect)所必需的所有东西。

在一个完整的页面应用中,不同的节点功能,不同的结构可以规划为多个模块,每个模块的实现的方式以及用到的技术大不相同,使用模块化编程可以减小各个模块之间的影响和联系,可以更方便的优化代码和重构代码,提高我们代码的重用性,便于后期维护。

模块化的好处:避免变量污染,命名冲突;提高代码复用率;提高维护性;依赖关系的管理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容