MVC是web开发中应用非常广泛的一种框架模式,之后又演变出MVP模式和MVVM模式
1.2.1 MVC
在MVC模式中,一个应用被分为三部分,即模型(Model),视图(View),控制器(Controller)。
模式代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它为控制器提供访问封装在模型内部的应用程序功能的能力。
视图用来组织模型的内容。它从模型获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。
控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或菜单选择操作。在一个web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户请求和模型行为的结果,控制器选择一个视图作为对用户请求的模型。图1-1描述了MVC模式中模型/视图/控制器 三部分的关系。
1.2.2 MVP模式
MVP 是由mvc 模式演变而来,它们的基本思想有想通的地方:模型Model 提供数据,视图View 表示器 Presenter 负责逻辑处理
MVP和MVC最大的区别是:在MVP模式中VIew不直接使用Model,它们之间的通信是通过Presenter 进行的,所有的交互都发生在Presenter内部,而在MVC中View 会之间从Model 中读取数据而不是通过 controller
MVP 模式中,模型 视图和表示器三者的关系如图所示
1.2.3 MVVM模式
MVVM (model-view-viewModel ) 是一种软件框架模式(由微软公司的WPF和Silverlight的架构师 Ken Cooper 和Ted Peters 开发),也是一种简化用户界面的事件驱动编程方式,由John Cossman 于2005年在他的博客上发表。
MVVM模式的核心是数据驱动,既 ViewModel ,ViewModel 是 View和Model的关系映射,viewModel是一个值转换器(value Converter)负责转换Model 中的数据对象,使数据变得更加易于管理和使用。在MVVM中的View 和Model使不可以直接进行通信的,它们之间存在着ViewModel 这个中介,充当观察者的角色。
MVVM模式的最核心特性就是数据双向绑定,当用户操作View时,viewModel感知到变化,然后通知Model发生了相应改变;反之,Model发生了改变,ViewModel感知了变化,然后通知View进行更新。ViewModel向上和View进行双向数据绑定,向下与Model通过接口请求进行数据交互,起到承上启下的作用,如图1-3所示。
MVVM模式的核心理念是通过声明书的数据绑定实现View的分离,完全解耦View。不少前端框架采用MVVM模式,如早期的Knockout Ember 以及当前留下的 Angular 和Vue.js