【软件工程理论与实践】Homework(五.1)

1.查阅资料,了解MVC与MVP的区别


MVC与MVP的定义:
MVC的定义如下:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVP的定义如下:

mvp的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

    定义方面来看,M和V是一样的,但是剩下的一个是C,一个是V,一下是看了别的大佬的博客转过来的图

【软件工程理论与实践】Homework(五.1)
    由图片就可以明显地看出两个模式的差别。
    总结一句:View 与不与Model交互 通俗的讲,就是你代码逻辑有没有写在View中的,有就是MVC,没有就是MVP


    MVC的三个问题:

1.V和M之间不匹配,用户界面和流程要考虑易用性,用户体验优化同时考虑业务流程的精确和无错.
2.C和M之间界线不清,什么样的逻辑是界面逻辑,什么样的逻辑是业务逻辑,很难定义清楚.
3.V的变化不能完全由Model控制,即observer模式不足以支持复杂的用户交互.这其实要求VC之间要有依赖.

    MVP与MVVM都是为了优化V,C之间的关系而提出的。
    MVP认为VC之间强绑定不可避免, 但可以加强P的能力,V变成只显示,P提供数据给V,把双向依赖简化为P直接依赖于V.
    由于V的数据由P提供,则MV之间的Observer关系转移到MP之间.
    MVP主要解决1,3两个问题,但代价是加重了问题2.P更重,而且与Model耦合无法框架化.但实践中view很难完全被动化,它总是会随用户的事件变化,这部分成为P的负担.


参考:参考链接