开发单页面应用时,往往一个路由页面对应了一个脚本文件,所有的页面逻辑都在一个脚本文件里。由于数据的获取、页面的渲染、对用户事件的响应在内的应用逻辑都混合在一起,在开发简单项目时,可能看不出什么问题;如果项目变得复杂,那么整个文件就会变得冗长、混乱,对项目的开发和后期维护非常不利。
MVC、MVP、MVVM是三种常见的软件架构设计模式,通过分离关注点的方式来组织代码结构,优化开发效率。
- MVC:
MVC通过分离Model层、View层和Controller层的方式来组织代码结构:Model层负责存储页面的业务数据和对相应数据的操作,View层负责页面的显示逻辑。Model层和View层采取了观察者模式,当Model层发生改变的时候它会通知相关View层更新页面;Controller层是View层和Model层的纽带,主要负责用户与应用的响应操作,当用户与页面产生交互的时候,Controller层中的事件触发器就开始工作了,通过调用Model层来完成对Model层的修改,然后Model层再去通知View层更新。 - MVP:
MVP与MVC唯一的不同在于Presenter层和Controller层的不同:在MVC中使用观察者模式实现当Model层数据发生变化时View层的更新,使得Model层和View层耦合在一起,当项目逻辑变得复杂的时候,可能会使得代码混乱、影响代码复用性;并且MVC中的Controller层只知道Model层的接口,因此它没有办法直接控制View层的更新。MVP中,View层的接口暴露给了Presenter层,因此可以在Presenter层中将Model层的变化和View层的变化绑定在一起,以此来实现Model层和View层的同步更新,从而实现了对Model层和View层的解耦。 - MVVM:
MVVM通过分离Model层、View层、ViewModel层的方式来组织代码结构:Model层和View层无直接关联,而是通过ViewModel层来进行联系的。通过数据双向绑定,当Model层中的数据改变时会触发View层的刷新,View层中由于用户交互操作而改变的数据也会在Model层中同步。这种模式实现了Model层和View层的数据自动同步,因此开发者只需要专注于数据的维护即可,而不需要自己手动操作DOM。