当前位置: 首页 > news >正文

Android 之 MVC架构

介绍

1. MVC架构分工​

  • ​Model层​​:处理数据验证、网络请求等业务逻辑。
  • ​View层​​:XML布局定义界面,Activity处理用户输入和显示结果。
  • ​Controller层​​:Activity作为控制器,协调Model和View的交互

对于登录模块的实现,我需要详细解释每个组件的职责和实现方式:

Model层主要负责处理数据和业务逻辑,包括用户信息的数据模型和登录验证逻辑。

View层由XML布局文件和Activity的一部分组成,负责展示登录界面和处理用户输入。

Controller层通常是Activity或Fragment,负责协调View和Model之间的交互

2. 项目结构与包组织​

​3. 详细代码实现​

​3.1 Model层​

处理用户数据和认证逻辑,独立于界面。

​User.java​​(数据模型)

package com.example.login.model;public class User {private String username;private String password;// Getter & Setterpublic String getUsername() { return username; }public void setUsername(String username) { this.username = username; }public String getPassword() { return password; }public void setPassword(String password) { this.password = password; }
}

 Authentication.java​​(认证逻辑)

package com.example.login.model;public class Authentication {// 模拟用户验证(实际开发中替换为网络请求)public boolean authenticate(String username, String password) {// 示例:用户名为"admin"且密码为"123456"时通过return "admin".equals(username) && "123456".equals(password);}
}
​3.2 View层​

XML布局定义登录界面元素,Activity初始化控件。

​activity_login.xml​

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><EditTextandroid:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="用户名"/><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密码"android:inputType="textPassword"/><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录"/><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"/>
</LinearLayout>
3.3 Controller层 (LoginActivity.java)​

协调用户输入、调用Model、更新View。

package com.example.login.controller;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.login.model.Authentication;public class LoginActivity extends AppCompatActivity {private EditText etUsername, etPassword;private TextView tvResult;private Button btnLogin;private Authentication authModel; // Model层引用@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);// 初始化View组件etUsername = findViewById(R.id.et_username);etPassword = findViewById(R.id.et_password);btnLogin = findViewById(R.id.btn_login);tvResult = findViewById(R.id.tv_result);// 初始化ModelauthModel = new Authentication();// 登录按钮点击事件btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 1. 获取用户输入String username = etUsername.getText().toString().trim();String password = etPassword.getText().toString().trim();// 2. 调用Model层验证boolean isSuccess = authModel.authenticate(username, password);// 3. 更新View层显示结果if (isSuccess) {tvResult.setText("登录成功!");tvResult.setTextColor(getResources().getColor(android.R.color.holo_green_dark));} else {tvResult.setText("用户名或密码错误");tvResult.setTextColor(getResources().getColor(android.R.color.holo_red_dark));}}});}
}

Controller层处理流程​​:

  1. ​监听事件​​:按钮点击触发登录流程。
  2. ​获取数据​​:从输入框提取用户名和密码。
  3. ​调用Model​​:将数据交给Authentication验证。
  4. ​更新View​​:根据验证结果显示成功/失败消息。

4. MVC在Android中的局限性​

  • ​Activity臃肿​​:Controller和View逻辑易混杂,导致代码量大(如网络请求放在Activity中会阻塞UI)。
  • ​View与Model未完全解耦​​:Activity直接操作Model,若需更换数据源(如从本地数据库改为API),需修改Controller代码。
http://www.dtcms.com/a/313185.html

相关文章:

  • 线段树学习笔记 - 摩尔投票问题
  • I2C基础
  • mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件
  • PHP现代化全栈开发:前后端分离与API架构实践
  • uni-app学习笔记01-项目初始化及相关文件
  • Go语言常量
  • 11.消息队列
  • 计算机视觉CS231n学习(2)
  • 从马武寨穿越关山
  • ICCV 2025 | EPD-Solver:西湖大学发布并行加速扩散采样算法
  • p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 达梦数据库联机备份和脱机备份的区别
  • Centos7 安装Python3.11
  • 【Linux系统编程】进程信号
  • leecode2958 最多K个重复元素的最长子数组
  • 解决飞书文档中PDF文档禁止下载的问题
  • 提升工作效率的利器:Qwen3 大语言模型
  • Python 程序设计讲义(60):Python 的函数——递归函数
  • 出现OOM怎么排查
  • 研报复现|史蒂夫·路佛价值选股法则
  • linux ollama模型缓存位置变更
  • 音视频学习(四十九):音频有损压缩
  • 机器学习之决策树(二)
  • 解决PyCharm的Terminal终端conda环境默认为base的问题
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-57,(知识点:电感的选型,电感参数,电感量,饱和电流,直流电阻,自谐振频率)
  • 可视化AI应用构建工具(Dyad)
  • 【内容规范】关于标题中【】标记的使用说明
  • 2.0 vue工程项目的创建
  • TableCurve 3D:自动化曲面拟合与方程发现