android MVC

来源:互联网 发布:java 值类型 编辑:程序博客网 时间:2024/06/05 20:42

我对于这点知识很模糊,很混乱,这里只是记录我能够理解的MVC


MVC概念

http://www.2cto.com/kf/201506/405766.html

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上

这里写图片描述

M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。

V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。 

C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器。  


实例说明:http://cinderella7.blog.51cto.com/7607653/1281696

android中的AdapterView控件的使用很容易理解MVC。

  一:AdapterView-->V(视图)

1:作用

以列表的形式显示数据。

2:内容

AdapterView的内容一般是包含多项相同格式资源的列表。

3:分类

(1)ListView:列表,其中只能含有一个控件TextView,

(2)Spinner:下拉列表,给用户提供选择

(3)Gallery:缩略图,已经被水平的ScrollView和ViewPicker取代,但也还算常用,是一个可以把子项以中心锁定,水平滚动的列表

(4)GridView:网格图,以表格形式显示资源,可以左右滑动的

4:事件

(1)用户单击列表项事件:为列表加载setOnItemClieckListener监听

(2)用户长按事件:为列表加载setOnItemLongClieckListener监听


二:Adapter-->C(控制器)

1:作用

把数据源中数据以某种样式(xml文件)显示在视图中。

2:分类

(1)ArrayAdapter:他只能处理列表项内容全是文本的情况。

       ◆数据源:数组或者List<String>对象或者其他

(2)SimpleAdapter: 他不仅可以处理列表项全是文本的情况,当列表项中还有其他控件时,同样可以处理。

       ◆数据源:只能为List<Map<“键”,“值”>>形式的数据

(3)自定义Adapter:根据xml文件中定义的样式惊醒列表项的填充,适用性最强。



三:数据--->M(模型)


 总结

用AdapterView来解释MVC就是:Adapter(Controller)将数据M(Model)显示在视图AdapterView(View)上,

所以MVC主要就是:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上


MVC的思想用在组织代码上


Step1:View视图

抽取所有界面元件的声明和定义,整合到单独一个函数findViews()中;

 <span style="white-space:pre"></span>private Button button_calc;<span style="white-space:pre"></span>private EditText field_height;<span style="white-space:pre"></span>private EditText field_weight;<span style="white-space:pre"></span>private TextView view_result;<span style="white-space:pre"></span>private TextView view_suggest;<span style="white-space:pre"></span>// 定义<span style="white-space:pre"></span>private void findViews() {<span style="white-space:pre"></span>button_calc = (Button) findViewById(R.id.submit);<span style="white-space:pre"></span>field_height = (EditText) findViewById(R.id.height);<span style="white-space:pre"></span>field_weight = (EditText) findViewById(R.id.weight);<span style="white-space:pre"></span>view_result = (TextView) findViewById(R.id.result);<span style="white-space:pre"></span>view_suggest = (TextView) findViewById(R.id.suggest);<span style="white-space:pre"></span>}

Step2:Controller

控制器抽取程序的逻辑(即界面元件的处理逻辑),整合到函数setListensers()中;

private void setListensers() {<span style="white-space:pre"></span>button_calc.setOnClickListener(calcBMI);   }
Step3:Model
把数据库的操作全部独立成几个类,这个时候只需要访问对应的方法就可以实现操作数据的功能

(这里详情:Android数据存储之:SQLite数据库存储


MVC在代码重构上的使用,使得代码读写容易,比如:

onCreate()方法:

public void onCreate(Bundle savedInstanceState) {<span style="white-space:pre"></span>super.onCreate(savedInstanceState);<span style="white-space:pre"></span>setContentView(R.layout.main);<span style="white-space:pre"></span>findViews();<span style="white-space:pre"></span>setListensers();   }
这是我暂时理解的意思

0 0