加入收藏 | 设为首页 | 会员中心 | 我要投稿 天津站长网 (https://www.022zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

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

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

我们做业务模块开发时,会经常定义一些数据结构类,比如个人资料可能会对应一个UserProfile类,一条订单数据可能会对应一个Order类,这些类没有任何逻辑,只有一些简单的getter、setter方法。有些人会认为像UserProfile或者Order这样的数据结构类就是Model。

我们已经强调了,Model层包含了业务数据以及对业务数据的操作。像UserProfile或者Order这样的数据结构类的实例甚至都不能称之为对象,可以看一下Uncle Bob的Classes vs. Data Structures这篇文章,对象是有行为的,一个数据结构实例没有行为,连对象都称不上,怎么能代表Model层呢!

静态的业务数据不能代表Model层,业务数据以及针对业务数据的操作共同构成了Model层,这也就是业务逻辑。再举个例子说一下吧,假设你在做一个叫“掘铁”的app,这个app现在只有一个页面,用来展示推荐的博客列表。OK,我们如果用MVP的形式该怎么写呢?我们就先不管和Model层完全没有交互的View了,Presenter层除了处理表现层逻辑外,还要向Model层发出业务指令,注意,Presenter并不处理业务逻辑,真正的业务逻辑还是由Model层完成。示例代码大概是下面这样:

  1. public class RecommendBlogFeedPresenter { 
  2.     private RecommendBlogFeedView view; 
  3.     private BlogMode model; 
  4.     public void onStart() { 
  5.         view.showLoadWait(); 
  6.         model.loadRecommendBlogs(new LoadCallback<>() { 
  7.             @Override 
  8.             public void onLoaded(List<Blog> blogs) { 
  9.                 view.showBlogs(blogs); 
  10.             } 
  11.         }) 
  12.     } 
  13.  
  14.  
  15. public interface BlogModel { 
  16.     void loadRecommendBlogs(LoadCallback<List<Blog>> callback); 
  17. public class BlogModelImpl implements BlogModel { 
  18.     private BlogFeedRepository repo; 
  19.     @Override 
  20.     public void loadRecommendBlogs(LoadCallback<List<Blog>> callback) { 
  21.         // BlogFeedRepository.fetch()很可能是耗时操作,所以实际写的时候会在非主线程执行,这里只是示例 
  22.         callback.onLoaded(repo.fetch("recommend")); 
  23.     } 
  24. public interface BlogFeedRepository { 
  25.     List<Blog> fetch(String tag); 

(编辑:天津站长网)

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

热点阅读