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 & Setter
    public 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">

    <EditText
        android:id="@+id/et_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="用户名"/>

    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码"
        android:inputType="textPassword"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"/>

    <TextView
        android: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层引用

    @Override
    protected 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);

        // 初始化Model
        authModel = new Authentication();

        // 登录按钮点击事件
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public 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代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值