前言:
在实际项目开发过程中,为了降低代码的耦合度,我们会选用一个架构去达到这个目的,但是我们再使用这些架构的过程中一定要明白我们所使用的架构的核心思想,本文主要针对我们最基础的mvc架构做下讨论,后来出现的mvp,mvvm都是在mvc的基础上演变过来的;如果有不严谨的地方,请多包涵
一 :首先来看mvc:
mvc的分层是 :Model-View-Control
model:它主要负责网络请求,数据库操作,针对业务模型,建立的数据结构,
view: 对应xml文件中的布局文件,以及在代码中动态控制view的部分
control:对应于android中的activity,主要负责数据的展示和页面的初始化
在android项目的mvc架构中,view 和control不太好彻底解耦,大部分都是由activity承担了这两层的角色;
下面我们通过代码来看下mvc的实现方式:
public interface BaseModel {
void onDestroy();
}
通过类名可以知道BaseModel这是所有model的基类,onDestroy主要做一些销毁的逻辑,类似于activity中的onDestory
public interface Callback<T> {
void CallBack(T t);
}
Callback接口主要是把model回调出去供其他层使用
下面的TestModel是具体的实现model
public class TestModel implements BaseModel{
public void getUserBean(String id,Callback1<UserBean > callback)
{
UserBean userBean= new BaseRestApi(SeverUrl.SHOPGOODSLIST,
RestApi.HttpMethod.POST);
callback.onCallBack(userBean);
}
@Override
public void onDestroy() {
}
public class UserBean
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
我们来看在activity中的使用:
public class TestActivity extends AppCompatActivity {
private TestModel testModel;
TextView nameTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
testModel=new TestModel ();
getUser(textView.getText().toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
testModel.onDestroy();
}
private void getUser(String id)
{
testModel.getUserBean(uid, new Callback<TestModel.UserBean>() {
@Override
public void onCallBack(SampleModel.UserInfo userInfo) {
setView(userInfo);
}
});
}
private void setView(TestModel.UserBean userBean)
{
nameTv.setText(userBean.getName());
}
}
可以看到avtivity中既有负责view显示的代码,也有负责控制逻辑的代码,所以我们要分清楚哪些代码是controller控制的,哪 些代码是view的操作;
mvc架构在很长一点时间深受开发者喜爱,因为把model层彻底解耦出来,减少了activity的负担,但是control和view层还是有 一 定程度的耦合度,无法做到彻底分离,所有就有了后续的mvp,mvvm架构的出来。