MVC, MVP, MVVM
MVC
M 表示 Model , 专门用来处理业务逻辑,不干别的事情。
V 表示View, 专注页面布局和数据显示。
C 表示Controller 翻译用户的输入,操作模型和视图。
例如,用户在界面点击了一个“计算”的按钮,View 把计算的请求传递给Controller,Controller找到或者创建Model,执行业务逻辑:计算薪水。
MVC的缺点:依赖太多
View 依赖Controller和Model
Controller依赖View和Model
Model 和View的关系虽然很弱, 但是也需要某种方式来通知View进行数据更新。
MVP
可以改变一下Controller, 把Model和View完全隔离开,让他们单独变化。
让Presenter调用View的方法去设置界面,仍然需要大量的、烦人的代码,这实在是一件不舒服的事情。
能不能告诉View一个数据结构,然后View就能根据这个数据结构的变化而自动随之变化呢?
MVVM
public class SalaryViewModel{
String grossSalary; //税前收入,和View中的相关字段对应
String netSalary; //净收入,和View中的相关字段对应
String tax; //个人所得税,和View中的相关字段对应
......
boolean isCalculating; // 一个标志位,表示正在计算
String errMsg; // 如果出错的话,记录出错消息。
}
当用户在界面上点击“计算”按钮的时候, 你们需要设置一个SalaryViewModel中的标志位:
salaryViewModel.isCalculating = true;
这样View 中就可以自动给用户展示一个消息:“正在计算....”
当薪水计算完成的时候, 如果没有错误,SalaryViewModel 中grossSalary, netSalary,tax等属性就有了值。 与此同时View 中对应的内容也会更新, 不用你们手工去设置, 很方便吧?