android MVC

本文详细介绍了MVC(Model-View-Controller)设计模式的概念及其在Android开发中的应用。通过具体的实例,阐述了如何将数据模型(M)、视图(V)与控制器(C)进行分离,以达到界面显示与业务逻辑层的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我对于这点知识很模糊,很混乱,这里只是记录我能够理解的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();
   }
这是我暂时理解的意思

### MVC 架构在 Android 开发中的应用 MVC(Model-View-Controller)是一种常见的软件架构模式,广泛应用于各种应用程序开发中。在 Android 中,虽然官方推荐使用 MVVM 或其他现代架构模式,但仍然可以通过合理的设计来实现传统的 MVC 模式。 #### Model 层 Model 是负责管理数据的部分,在 Android 应用中通常由 Java/Kotlin 类表示业务逻辑和数据存储。这些类可能封装了网络请求、数据库交互或其他形式的数据获取与更新操作[^2]。 例如: ```java public class UserModel { private String username; private String email; public UserModel(String username, String email) { this.username = username; this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ``` 上述代码展示了如何定义一个简单的 `UserModel` 来保存用户信息[^4]。 #### View 层 View 负责展示数据给用户,并接收用户的输入。在 Android 中,Activity 和 Fragment 常常作为视图层的一部分存在。它们通过 XML 文件布局描述 UI 组件的位置和样式[^3]。 下面是一个简单的 Activity 示例,用于显示用户名: ```xml <!-- activity_main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Username will appear here"/> </LinearLayout> ``` 对应的 Activity 实现如下: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.text_username); UserModel userModel = new UserModel("John Doe", "john.doe@example.com"); textView.setText(userModel.getUsername()); } } ``` 在这个例子中,`MainActivity` 只负责将模型中的数据传递到视图上,而不涉及任何复杂的业务逻辑[^1]。 #### Controller 层 Controller 的职责在于协调 Model 和 View 之间的关系。它可以监听来自用户的事件并通知 Model 更新状态,或者反过来从 Model 获取最新数据刷新 View。对于 Android 应用而言,这部分功能一般会嵌入到 Activity 或者专门创建的控制器类里去完成。 假设我们需要增加按钮点击更改用户名的功能,则可以在 Controller 部分加入相应处理逻辑: ```java Button changeNameButton = findViewById(R.id.button_change_name); changeNameButton.setOnClickListener(v -> { userModel.setUsername("Jane Smith"); textView.setText(userModel.getUsername()); }); ``` 以上片段说明了当用户按下某个按钮时触发的动作——改变当前对象的名字属性并通过重新设置文本框内容反映出来这一变化过程。 ### 总结 尽管 Google 更倾向于推广 MVVM 等新型设计思路,但在某些场景下采用经典的 MVC 方法仍然是可行的选择之一。只要清晰划分好三个组成部分各自的职能范围即可构建起稳定可靠的应用程序结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值