MVC / MVP / MVVM

MVC

  • mvc 定义
    model view controler 模型 视图 控制器 ,是一种软件的设计典范, 业务逻辑,数据,界面显示分离的 方法 组织代码,然后可以将业务逻辑 聚集到一块。
    1.M: 业务逻辑处理
    2.V: 处理数据显示的部分
    3.C: Activity 处理用户交互问题
    mvc 便于 UI 界面的显示 和业务逻辑的分离。
    MVC的特点:耦合性低,可扩展性好

Activity 是 controler 起到 桥梁的作用,通过接口通信/
数据model 里拿数据, 比如 model 里面 getdata() , getdata() 方法里面网络请求等成功之后,又 根据不同的 情况走某个接口,该接口 走到 act 中
而这个model 里面也是 implement 了一个接口,除了getdata(),可以加入更多的 getX().

MVP

对于MVC呢
由于Android 端 的 view 层 是xml布局文件,不像在 java web 那样,view 层功能的强大,能做的事情非常有限,
而 controler 对应的 activity,而activity 又不得不操作一些view,而这些 操作本该是view 层做的事情,所以 controler 层显得非常冗余,为改善这一点提出了 MVP.

M : 依然是业务逻辑和实体模型
V :对应于Activity,负责 View 的绘制以及用户的交互
P :负责 完成 View 与 Model 间的交互

image.png

如图就是 在MVP 中,model 层不会直接与 View 层交互, 而是通过Presenter 中介进行交互,也正因为 android中,view层很重要,只能在主线程中操作UI,经常是不可以做耗时操作什么的,mvp 把 view 层跟数据层切断 是非常非常合理的。从代码上一开始的定位就 是对性能好一点。

例子:

/bean/ 目录下 User ,代表model 层
/presenter/ 目录下 UserLoginPresenter ,代表presenter 层
/view/ 目录下 识图层 ,view 层 IUserLoginView

脑袋里开始过这样的设计。

User.java 就是一些 username,password 的 get(), set()

然后实现一个接口,
public interface IUserBiz {
void login(String username , String password ,OnLoginListener listener);
}

以及他的实现方法:
UserBiz implement IUserBiz {
@Override
public void login ( String usrename ,String password, OnLoginListener listener){

}
}

然后就是view 层,对应activity ,实现也是一个接口,
public interfac IUserLoginView{

String getUserName():
String getPassWord();
void clearUserName();
void clearPassword();
void showLoading();
void hideLoading();
void showError();

}
Activity 中 implement 这个接口
在act 中声明一个 presenter

然后就是 presenter:
public class UserLoginPresenter {
public UserLoginPresenter(IUserLoginView userloginView){
this.userLoginView = userLoginView;
this.userBiz = new UserBiz();
}

public void login() {
//通过userBIz.login( userloginView.getUserName() ----- 等等)
}
}

MVVM

image.png

MVVM 其实跟 MVP 很类似的,主要是用数据绑定跟依赖 打造一个更高效的架构。
1:View:对应与 Activity 和XML,负责View 的绘制以及与用户交互, 做的其实就是UI相关的工作,view 层不做和业务相关的事,更新UI 也通过数据绑定来完成,业务尽量在viewmodel 层去做,把Activity 中的业务逻辑 移到viewmodel 层去 做,而Activity 要做的事就是 去初始化控件啊,属性之类的,而View 层提供更新UI的接口,但是不提倡把所有的 UI元素 都通过数据绑定来更新UI,View 层还可以做绑定事件等等。负责绘制UI,和用户操作,但是不处理业务。 最重要的一点就是View 层不做任何与业务逻辑有关的操作
2:Model : 实体模型 除了数据bean,还提供接口 供 第三个层,viewmodel 层用。数据的存储,获取,变化,都由他完成。
3: ViewModel :负责完成View 与model 间的交互,负责业务逻辑。他不会持有任何控件的引用,持有引用的任务 都挪在view 层区完成了,这就不不像MVP 中的 presenter 需要一个view 的引用接口的。
ViewModel 层 和View 层的交互是通过DataBInding 做的。

总结

mvc -- controler 层 的 act ,view 的 xml 太弱了,一大部分操作其实 都由 act 完成,所以 c 太 冗余了

mvp --- view -->actvity , 让 presenter 层做业务逻辑,presenter 持有的是view 的接口,操作接口,而不是直接操作view,这样就把识图操作和 业务逻辑解耦,从而让 activity 成为真正的view 层

mvvm -- view 层, viewmodel 层,model 层, view 层不能做任何业务操作, 而 viewmodel 层却只能做 业务操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容