MVC是什么?
MVC是一种架构设计模式。主要由三个对象组成。M-Model、V-View、C-Controller。
-
Model 模型model用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,会有一个或多个视图监听此模型。一旦模型的数据发生变化,模型将通知有关的视图。(数据相关)
-
View 视图view是它在屏幕上的表示,描绘的是model的当前状态。当模型的数据发生变化,视图相应地得到刷新自己的机会。(视图相关)
-
Controller 控制器controller定义用户界面对用户输入的响应方式,起到不同层面间的组织作用,用于控制应用程序的流程,它处理用户的行为和数据model上的改变。
M\V\C三个对象各司其职,各自负责自己范围的事情,有利于大型应用程序的解耦,将在开发和维护中大大提高效率。同时,可以减少大量的重复代码,让代码变得更简洁。
EventBus
由于一套业务改成MVC的模式进行编写,三个对象之间较之前解耦了,但是有些情况,三个对象之间还是需要通信的。那么就需要给出方案解决问题。EventBus就是较好的解决方案。
M\V\C三个对象都之间或间接地继承于EventBus类。因此都可以调用EventBus的方法。EventBus主要API就是发送事件和监听事件。
class EventBus {
$on(event, handler) {
handler()
}
$emit(event) {}
}
$on方法件接受事件名和handler回调函数。
$emit方法接受事件名。当执行了emit方法,相应的on方法就会执行handler函数。从而完成了通信。
表驱动编程
表驱动编程的意义在于逻辑与数据的分离。
当多重if、else往往可以使用表驱动编程。将数据写成一个表,然后根据表进行编写代码,这样的代码结构清晰、维护成本低。
仔细一下,这不正是小型MVC吗?将数据写成一个表(model),根据表进行编写代码(view\controller)。
所以我们平常写代码看到大量类似的代码时,就可以想想能不能使用表驱动编程,将重要的数据抽离出来从而简化代码。
模块化
模块化:将实现某种功能的代码进行封装,暴露接口以便于使用。
其实MVC可以算是模块化的一类。
M:对数据进行操作的代码。
V:对视图进行操作的代码。
C:数据、视图之外的其他操作代码。
这三个对象都对代码进行了封装,同时暴露了接口。也就是MVC每个对象都可以看成一个模块。
怎么算好的模块化?
模块化重点在于封装和暴露。
那么将封装代码写的简洁、高效就是无可争议的了。
那么暴露呢?站在使用者的角度想,肯定是越简单的引入模块越好了。所以暴露模块最好只暴露一个文件、一个api。通过一个即可完成多个操作。减少使用者的心智负担。