MVC
刚接触编程,相信第一个遇到的框架就是 MVC ,不管你经意还是不经意写出来的 Android 程序他就是 MVC 框架,只不过是 MVC 框架的某一个变种(最混乱的那种)。Android 系统本身就根据 MVC 建造的。
设计图- 视图层(View) 对应于 xml 布局文件和 java 代码动态 view 部分
- 控制层(Controller) 对应于 Activity 和 Fragment 。
- 模型层(Model) 针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O 的操作。
由于MVC很好的分离了视图层和业务层,所以它具有以下优点:
- 开发速度快
- 可维护性高
- 易于理解
- 由于 MVC 的设计思想是从 Model 出发,而没有考虑到 View 端的复杂性,这样导致的问题是 Model 难以符合复杂多变的 View 端变化。导致 Model 的作用很小,而很多 View 层的职责也转移到了 Controller 层。Controller 变得臃肿不堪。耦合性也变高了。
- 测试困难。
需求:一个简单的按钮点击事件。 1. 代码 Listener.java
public interface Listener {
void onEvent(String str);
}
Model.java
public interface Model {
void onHandle(Listener listener,String str);
}
ModelImpl.java
public class ModelImpl implements Model {
@Override
public void onHandle(Listener listener, String str) {
listener.onEvent(str + "ok");
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements Listener {
private Button mButton;
private ModelImpl mModel = new ModelImpl();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mModel.onHandle(MainActivity.this,mButton.getText().toString());
}
});
}
@Override
public void onEvent(String str) {
mButton.setText(str);
}
}
小结
- 具有一定的分层,Model 彻底解耦,Controller 和 View 并没有解耦;
- 层与层之间的交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有;
- Controller 和 View 在 Android 中无法做到彻底分离,但在代码逻辑层面一定要分清;
- 业务逻辑被放置在 Model 层,能够更好的复用和修改增加业务。