专栏名称: 程序员之家
程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!
目录
相关文章推荐
程序员的那些事  ·  “令人作呕!” 马斯克刚离职没几天就开喷了 ·  昨天  
程序员的那些事  ·  程序员:在 8 ... ·  2 天前  
蚂蚁技术AntTech  ·  清华蚂蚁开源首个全异步强化学习训练系统,SO ... ·  昨天  
51好读  ›  专栏  ›  程序员之家

MVC, MVP, MVVM比较以及区别

程序员之家  · 公众号  · 程序员  · 2017-04-29 22:59

正文

请到「今天看啥」查看全文



3.2 被动MVC


下图是被动MVC中的流程,和主动MVC不同之处是, View没有订阅Model数据变化的事件,等待Model来通知需要根据新的数据来更新View. 在被动MVC中,Controller负责通知View, 有数据变化,需要更新视图。



被动MVC 中,与主动MVC的区别在于:


1、模型对视图和控制器一无所知,它仅仅是被它们使用


2、控制器使用视图,并通知它更新数据显示


3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新)


3.3. Web应用中的MVC框架


Web中的MVC框架都是被动MVC模式,因为web应用中, 由于http是基于请求和响应方式协同工作的,因此当服务器端的model(数据)发生变化时,它不会立即更新客户端的view,只有客户端重新请求或刷新页面时才更新.


下图是典型的MVC框架中的MVC一个请求流程。



3.4 MVC总结


MVC优点


  • 由于MVC很好的分离了视图层和业务层,所以它具有以下优点

  • 耦合性低

  • 开发速度快

  • 可维护性高

  • 没有控件的概念,对html没有封装,易于理解

  • 和其它平台(java, php)等更加相似。便于人才获取


MVC使用的误区


1.把Model理解成实体类(Entity),在MVC中Model应该包含2部分功能,一部分是处理业务逻辑,一部分是提供View显示的数据


2.把业务逻辑全部放在Controller端 这两个误区本质上都是对Model的作用不明导致的。Model在MVC架构中起的作用非常重要,它应该是业务逻辑真正的实现层。所以Model的实际上是Business Model(业务模型)。而Controller仅仅起一个“桥梁”作用,它负责把View的请求转发给Model,再负责把Model处理结束的消息通知View。Controller是用来解耦View和Model的,具体一点说,就是为了让UI与逻辑分离(界面与代码分离)。


引自http://www.techopedia.com/definition/27454/model-mvc-aspnet


Techopedia explains Model (MVC)


The Model is the part of MVC which implements the domain logic. In simple terms, this logic is used to handle the data passed between the database and the user interface (UI).


The Model is known as domain object or domain entity.

The domain objects are stored under the Models folder in ASP.NET. The domain model represents the application perspective for the data to be handled whereas a view model is required to produce the engine that generates the View.


This definition was written in the context of ASP.NET.


MVC的缺点


完美的MVC应用场景应该是这样的:


有个Student Model, 关联StudentListView,  StudentEditView.


对于StudentListView, Student Model提供Student的集合数据来显示StudentListView


对于StudentEditView, Student Model提供单个Student数据来展示StudentEditView并且响应StudentEditView的保存操作。


但是这只是完美的情况,实际应用中,在ListView上,不单单显示Student的信息,可能还需要这个Student的历史成绩,家庭情况,  老师信息。而这些是Student Model不能提供的。







请到「今天看啥」查看全文