当前位置: 首页 > 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.lryc.cn/news/609117.html

相关文章:

  • TVS二极管数据手册解读
  • kraft的设计与实现
  • 【数据结构】队列的顺序存储与链式存储(C语言版)
  • 深度学习中的模型知识蒸馏
  • 【Bluetooth】【Transport层篇】第三章 基础的串口(UART)通信
  • 文本换行问题
  • Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程
  • 【从零开始学习Redis】初识Redis
  • [Oracle] DUAL数据表
  • CAP 理论笔记
  • 推荐系统学习笔记(九)曝光过滤 Bloom Filter
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 自动驾驶中的传感器技术18——Camera(9)
  • Connection refused: no further information: localhost/127.0.0.1:2375
  • docker 可用镜像列表(长期免费)
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • Docker环境离线安卓安装指南
  • centos9 安装docker engine
  • C++ : 反向迭代器的模拟实现
  • Java基本技术讲解
  • 深入解析C++函数重载:从原理到实践
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • B+树索引结构原理解析与最佳实践
  • 创建型设计模式:对象诞生的艺术与智慧
  • 设计模式学习[17]---组合模式
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器
  • STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现
  • Spring Boot 的事务注解 @Transactional 失效的几种情况