美文网首页常用汇总
Android 进阶之 MVC

Android 进阶之 MVC

作者: Kevin_小飞象 | 来源:发表于2019-04-01 15:40 被阅读6次

刚接触编程,相信第一个遇到的框架就是 MVC ,不管你经意还是不经意写出来的 Android 程序他就是 MVC 框架,只不过是 MVC 框架的某一个变种(最混乱的那种)。Android 系统本身就根据 MVC 建造的。

设计图

mvc.jpg
  • 视图层(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 层,能够更好的复用和修改增加业务。

相关文章

网友评论

    本文标题:Android 进阶之 MVC

    本文链接:https://www.haomeiwen.com/subject/rasvbqtx.html