此篇结合SourceCode谈一下。。。
Android中的MVC
View层
UI的描述一般来说都是用的res中的那一堆xml
Controller层
Android的Controller基本上就Activity。个人觉得严格意义上讲,Activity还承担了一部分View跟Model之间的交接。
Model层
针对业务逻辑,进而开发的IO,NIO,DB,之类的操作都在这里。
MVC代码讲解
![](https://img-my.csdn.net/uploads/201609/09/1473390008_6080.gif)
Controller层
public class MainActivity extends Activity implements CalculatModelImpl.onCalculatListener{
private EditText mTxt1, mTxt2;
private TextView mResult;
private Button mCal;
private CalculatModelImpl mModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTxt1 = (EditText) findViewById(R.id.txt1);
mTxt2 = (EditText) findViewById(R.id.txt2);
mCal = (Button) findViewById(R.id.cal);
mCal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mModel.calculate(Integer.valueOf(mTxt1.getText().toString()).intValue(),
Integer.valueOf(mTxt2.getText().toString()).intValue(),
MainActivity.this);
}
});
mResult = (TextView) findViewById(R.id.txt_result);
mModel = new CalculatModelImpl();
}
@Override
public void onSuccess(int result) {
mResult.setText("success:" + result);
}
@Override
public void onError() {
mResult.setText("failed...");
}
}
Activity实现了CalculatModelImpl.onCalculatListener,并在onCreate中,实例化了CalculatModelImpl,在mCal中设置Listener,做实际的运算。
这里Activity作为Controller,获取了Views,起了承载与View相关操作的转接。
通过实现CalculatModelImpl.onCalculatListener的方式处理Model层返回的结果。在View层更新UI。
在View.onClickListener中进行实质上的Model层的调用。
整个MVC的框架就出来了。
Model层
public class CalculatModelImpl implements CalculatModel{
public CalculatModelImpl() {
}
public interface onCalculatListener {
public void onSuccess(int result);
public void onError();
}
@Override
public void calculate(int num1, int num2, onCalculatListener listener) {
try {
int result = num1 / num2;
android.util.Log.e("eee", "eee result = " + result + " num1 = " + num1 + " num2 = " + num2);
listener.onSuccess(result);
} catch(Exception e) {
listener.onError();
}
}
}
这里CalculatModelImpl实现了CalculatModel。在calculate中做了具体的逻辑处理。
这样,逻辑处理 就被完全封装在Model中.
小结
MVC有缺点!!!随着,界面的复杂性增加,Activity不仅要负责View的控制,还要负责Model与View之间的传递。
就会出现臃肿的代码。。。View层缺乏基本的控制,Controller又太多其他的工作。。。