当前位置:   article > 正文

Android开发模式之MVC模式_安卓开发mvc模式

安卓开发mvc模式

目录


前言

Android开发之MVC结构

MVC模式的优势与不足

MVC模式的案例

总结


前言

接触过Android开发的小伙伴们一定对Android的开发模式并不陌生。例如我们常见Android开发模式三剑客MVC模式、MVP模式和MVVM模式。开发模式的存在有着优化代码结构,降低功能模块之间耦合度的作用,所以非常值得我们开发人员进行研究和学习。本文中主要介绍Android开发中的MVC模式。


Android开发之MVC结构

MVC是Model View Controller三个单词的简称。Model代表着逻辑模型;View代表着视图模型;Controller代表着控制器。逻辑模型是应用中用于处理应用程序数据逻辑的部分,逻辑模型的对象一般在数据库中负责进行数据的存储。视图模型负责在屏幕上渲染出相应的图形信息展示给用户看。控制器负责截获用户的按键和屏幕触摸等事件,协调Model对象和View对象。

模型层(Model):负责数据处理相关的逻辑,通知View改变,会涉及到网络请求、数据存储等相关功能。Model可以在values目录下通过xml文件格式生成,也可以通过硬编码的方式直接Java代码生成。Adapter是View和Model之间联系的桥梁。
视图层(View):View是应用与用户进行交互的媒介,它代表软件应用中的图形展示、触觉反馈等职责。负责将用户的请求通知Controller,并根据model更新界面。View可以在layout目录下通过xml文件格式生成,用findViewById()获取;当然View也可以通过硬编码的方式直接用Java代码生成。
控制层(Controller):Controller控制器用于接收用户请求并更新model。在应用负责对外部事件的响应,包括点击、触摸等。Controller实现了一个事件队列,每一个外部事件均在事件队列中被唯一标识。框架依次将事件从队列中移出并派发出去。

这里写图片描述
逻辑图向我们展示的是一个闭环的MVC的工作流程。用户和应用进行交互,用户进行一系列操作(点击、触摸、滑动等)形成事件传递给View接收;View接收到来自用户的指令和事件后传递给Controller;Controller接收到通过View传递过来的用户的请求后,将用户输入的指令和数据传递给Model模型,通知Model模型完成具体的数据操作。Model进行一系列的逻辑判断和数据库存取操作后,将更新后的数据展示到View上,最终呈现给用户。
我们可以清楚的知道M层处理数据,业务逻辑;V层处理界面的显示结果;C层起着桥梁的作用,用来控制V层和M层通信以此达到分离视图显示和业务逻辑层。

MVC模式的优势与不足

优势:
1.耦合度低:视图层和业务层分离,这样就可以使得视图层代码被更改的时候不用重新编译model和controller代码。
2.重用性高:一个模型内容可以在多个视图中进行展示(共享model)。
3.生命周期成本低:MVC使开发和维护用户接口的技术含量降低。

不足:
1.使得系统结构和实现变得更加复杂:对于比较简单的界面,如果严格按照MVC的格式会使得代码结构的复杂性增加,还有可能产生过多的更新操作降低运行效率。
2.视图和控制器之间的关联性过强:视图和控制器虽然是独立的模块,但是关联性很强。视图在没有控制器的情况下,使用范围很局限,控制器也是如此。因此这便妨碍了他们的独立重用。
3.视图对数据模型的访问效率过低:根据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的的频繁访问,也将损害操作性能。

MVC模式的案例

因为ListView的使用层次很清晰,所以在此已该控件的使用为例。
视图View层:
在res/layout文件夹下创建activity_my.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

直接通过Java代码硬编码的方式实现model和controller以及两者之间的关联

public class MyActivity extends Activity {
ArrayAdapter<String> adapter;
ListView listView

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //界面中的ListView是View,这里通过硬编码的方式直接Java代码生成
        list = new ListView(this);
        //Controller部分,控制model(data)如何在view(ListView)中显示
         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData());
        //View(listview)和Model(data)是通过Adapter进行关联的。
        listView.setAdapter(adapter);
        setContentView(listView);
        // 点击事件,Controller负责
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // position是从0开始的,获取点击item的内容
Toast.makeText(ArrayAdapterActivity.this, getData().get(position), Toast.LENGTH_SHORT).show();
            }
        });
}

    // model层,数据部分内容
    private List<String> getData() {
        List<String> data = new ArrayList<String>();
        data.add("木四1");
        data.add("木四2");
        data.add("木四3");
        data.add("木四4");
        return data;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

总结

通过上述的讲解,我们可以清楚的知道为什么Android开发中需要使用到MVC开发模式。使用MVC开发模式虽然会使我们的代码结构变得比较复杂,但是对于我们开发来说结构更清晰、耦合性更低,可拓展性更好。
但是MVC还有一个比较大的不足,那就是View层和Model层是联系比较密切的,存在的一定的耦合。耦合对于程序开发是比较重大的打击,无论是开发过程,还是测试维护,都注定会消耗我们更多的精力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/178137
推荐阅读
相关标签
  

闽ICP备14008679号