加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长资讯 > 评论 > 正文

关于MVC/MVP/MVVM的一些错误认识

发布时间:2019-11-04 19:08:44 所属栏目:评论 来源:科技在发展
导读:在Android开发中使用MVP和MVVM模式早已不是新鲜事了,各种MVP/MVVM相关的文章、开源库也已屡见不鲜,甚至是让人眼花撩乱,那么我为什么还要在这个早已被画满涂鸦的黑板上再来涂涂画画呢?是想彰显我的存在感吗?那当然!啊不不不不完全是!我还想要警醒读到这

能感受到我想表达的意思吗?就是Presenter/ViewModel根据当前交互状态决定该显示什么,而View要做的是如何显示它们。再比如说下拉刷新的场景,由View告诉Presenter/ViewModel,它接收到了下拉事件,然后Presenter/ViewModel再告诉View,让它去显示刷新提示视图,至于这个刷新提示长什么样就由View来决定。当然Presenter/ViewModel也可能会判断当前网络不可用,而让View显示一个网络不可用的提示视图。

为什么要让Presenter/ViewModel处理几乎所有的表现层逻辑呢?主要是为了提高可测试性,将尽可能多的表现层逻辑纳入到单元测试的范围内。因为对视图控件的显示等等进行单元测试太难了,所以View是基本上没法进行单元测试的,但是Presenter/ViewModel是完全可以进行单元测试的:

  1. public class ProfilePresenterTest { 
  2.     private ProfilePresenter presenter; 
  3.     private ProfileView view; 
  4.     @Test 
  5.     public void testShowEditStateOnButtonClick() { 
  6.         // 浏览状态下点击编辑按钮,验证View是否显示了编辑状态视图 
  7.         // 也就是验证view.showEditState()方法是否被调用了 
  8.         presenter.setState(State.NORMAL); 
  9.         presenter.onEditStateButtonClicked(); 
  10.         Mockito.verify(view).showEditState(); 
  11.     } 
  12.     @Test 
  13.     public void testShowNormalStateOnButtonClick() { 
  14.         // 编辑状态下点击完成按钮,验证View是否显示了浏览状态视图 
  15.         // 也就是验证view.showNormalState()方法是否被调用了 
  16.         presenter.setState(State.EDIT); 
  17.         presenter.onEditStateButtonClicked(); 
  18.         Mockito.verify(view).showNormalState(); 
  19.     } 

你看,这些表现层逻辑就都能进行单元测试了吧!大概懂我意思了吧?

关于MVC/MVP/MVVM的一些错误认识

OK,现在你已经知道表现层了,那业务层又是干什么用的呢?现在我们就要开始谈到M了。

M是什么?M是指那些喜欢从受虐中获得性……哎呀,不好意思,搞混了!哎~学识渊博就是麻烦!M者,Model也,再长一点就是Domain Model,中文名字叫领域模型。我们看一下维基百科上对Domain model的定义:

  • In software engineering, a domain model is a conceptual model of the domain that incorporates both behaviour and data.

怎么样,是不是很通俗易懂呀?当然不是!刚刚开始有点理解Model层是处理业务逻辑的,现在又来了个抖MMM……Domain,我都不知道该往哪里去想了!Domain,简单点就把它理解成业务,我觉得都没啥问题。我这里引用这句话,主要是想强调,Model层包含了业务数据以及对业务数据的操作(behaviour and data),也是为了引出第二个错误观点。

错误二:Model就是静态的业务数据

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读