网上谈论MVC,MVP和MVVM模式甚多,也是非常基础的面试题之一。
这三种模式Web网页开发、Client终端开发 (Android, iOS,家庭PC) 中应用甚广。然而网上大多只是画画图,总结下优缺点,却没有好好写简单粗暴的例子来加深新人的理解。这也是这篇文章的诞生初衷。
MVC模式
MVC模式,即是Model-View-Controller模式,MVC体现的是应用程序设计中的分层思想。MVC模式三层主要各自完成这些工作:
Model层:
1. 建立数据模型:存储数据,并考虑数据持久化和读写;
2. 封装数据和业务逻辑:提供函数供controller调用;
Controller层:
1. 获取Model数据:调用函数得到返回数据,渲染到View;
2. 设置View:组装View和View响应事件,处理View的生命周期;
View层:
1. 通过UI元素展示数据;
2. 接受用户操作并做出反馈;
那么结合以上概念,可以在Android写成该例:
首先是Model层,建立Person类,封装两个数据域age,name并提供Mutator/Accessor( 国人爱称set/get)给其他类调用获取数据。
public class Person {
private int age;
private String name;
public int getAge(){
return this.age;
}
public void setAge(int mAge){
age = mAge;
}
public String getName(){
return this.name;
}
public void setName(String mName){
name = mName;
}
}
那么Controller层则是对应的Activity:
public class Controller extends AppCompatActivity {
private Person person;
private TextView tv_name;
private TextView tv_age;
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setContentView(R.layout.activity_mvc);
person = new Person();
person.setName("tremendous");
person.setAge(25);
tv_name = (TextView) findViewById(R.id.tv_name);
tv_age = (TextView) findViewById(R.id.tv_age);
setData(person);
}
public void setData(Person p){
tv_name.setText(p.getName());
tv_age.setText(p.getAge());
}
}
View层呢?则是对应activity_mvc.xml (也就是setContentView()中间的参数):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"