赞
踩
接触过Android开发的小伙伴们一定对Android的开发模式并不陌生。例如我们常见Android开发模式三剑客MVC模式、MVP模式和MVVM模式。开发模式的存在有着优化代码结构,降低功能模块之间耦合度的作用,所以非常值得我们开发人员进行研究和学习。本文中主要介绍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层通信以此达到分离视图显示和业务逻辑层。
优势:
1.耦合度低:视图层和业务层分离,这样就可以使得视图层代码被更改的时候不用重新编译model和controller代码。
2.重用性高:一个模型内容可以在多个视图中进行展示(共享model)。
3.生命周期成本低:MVC使开发和维护用户接口的技术含量降低。
不足:
1.使得系统结构和实现变得更加复杂:对于比较简单的界面,如果严格按照MVC的格式会使得代码结构的复杂性增加,还有可能产生过多的更新操作降低运行效率。
2.视图和控制器之间的关联性过强:视图和控制器虽然是独立的模块,但是关联性很强。视图在没有控制器的情况下,使用范围很局限,控制器也是如此。因此这便妨碍了他们的独立重用。
3.视图对数据模型的访问效率过低:根据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的的频繁访问,也将损害操作性能。
因为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>
直接通过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;
}
}
通过上述的讲解,我们可以清楚的知道为什么Android开发中需要使用到MVC开发模式。使用MVC开发模式虽然会使我们的代码结构变得比较复杂,但是对于我们开发来说结构更清晰、耦合性更低,可拓展性更好。
但是MVC还有一个比较大的不足,那就是View层和Model层是联系比较密切的,存在的一定的耦合。耦合对于程序开发是比较重大的打击,无论是开发过程,还是测试维护,都注定会消耗我们更多的精力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。