Android中的MVC
View层
UI的描述一般来说都是用的res中的那一堆xml
Controller层
Android的Controller基本上就Activity。个人觉得严格意义上讲,Activity还承担了一部分View跟Model之间的交接。
Model层
针对业务逻辑,进而开发的IO,NIO,DB,之类的操作都在这里。
MVC代码讲解
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又太多其他的工作。。。