android 项目重构之 MVC 模式

来源:互联网 发布:android ping网络 编辑:程序博客网 时间:2024/06/05 19:07

android 项目重构之 MVC 模式

众所周知,在 android 开发中,activity 充当着十分重要的角色,作为 4 大组件之首,activity 不仅负责展示用户界面,而且还负责大量的业务逻辑判断、界面切换等等。凡此种种使得 activity 的代码变得臃肿不堪,阅读性和可维护性都大大降低。此时,我们想到了使用一些常用的设计模式来重构我们的项目代码,本篇我将使用一个十分简单的用户注册登录案例来讲解如何使用 MVC 模式重构项目。

未重构时的项目结构和界面

界面重构前项目结构

布局文件 main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">        <TextView            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="username:"/>        <EditText            android:id="@+id/et_username"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="3"/>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">        <TextView            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="password:"/>        <EditText            android:id="@+id/et_password"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="3"/>    </LinearLayout>    <Button        android:id="@+id/btn_register"        android:text="register"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <Button        android:id="@+id/btn_login"        android:text="login"        android:layout_width="match_parent"        android:layout_height="wrap_content"/></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        final EditText etUsername = (EditText) findViewById(R.id.et_username);        final EditText etPassword = (EditText) findViewById(R.id.et_password);        findViewById(R.id.btn_register).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String username = etUsername.getText().toString().trim();                String password = etPassword.getText().toString().trim();                if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {                    Toast.makeText(MainActivity.this, "username or password can not be null", Toast.LENGTH_SHORT).show();                } else {                    System.out.println("username = " + username);                    System.out.println("password = " + password);                    // do register                }            }        });        findViewById(R.id.btn_register).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String username = etUsername.getText().toString().trim();                String password = etPassword.getText().toString().trim();                if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {                    Toast.makeText(MainActivity.this, "username or password can not be null", Toast.LENGTH_SHORT).show();                } else {                    System.out.println("username = " + username);                    System.out.println("password = " + password);                    // do register                }            }        });    }}

使用 MVC 模式重构之后的项目结构

这里写图片描述

重构之后的项目多了 model 层的 UserUserBll 类,这两个类一个用来封装用户信息,一个用来处理与用户相关的业务逻辑。

重构之后的 UserBLL.java

/** * 业务逻辑层:处理与用户相关的操作 * Created on 2017/8/23. * Author: Bean. * E-mail: sleticalboy@gmail.com */public class UserBLL {    /**     * login     *     * @param user     */    public void doLogin(User user) {        // login ...    }    /**     * register     *     * @param user     */    public void doRegisger(User user) {        // register ...    }    /**     * update user information     *     * @param user     */    public void updateUserConf(User user) {        // update user info ...    }}

重构之后的 MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private EditText mEtUsername;    private EditText mEtPassword;    private Button mBtnRegister;    private Button mBtnLogin;    UserBLL mUserBLL;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mUserBLL = new UserBLL();        initView(); // 初始化界面        setListeners(); // 设置界面按钮点击监听    }    /**     * 设置按钮的点击监听     */    private void setListeners() {        mBtnLogin.setOnClickListener(this);        mBtnRegister.setOnClickListener(this);    }    /**     * 初始化界面     */    private void initView() {        mEtUsername = (EditText) findViewById(R.id.et_username);        mEtPassword = (EditText) findViewById(R.id.et_password);        mBtnRegister = (Button) findViewById(R.id.btn_register);        mBtnLogin = (Button) findViewById(R.id.btn_login);    }    @Override    public void onClick(View v) {        User user = getUser();        switch (v.getId()) {            case R.id.btn_register:                mUserBLL.doRegisger(user);                break;            case R.id.btn_login:                mUserBLL.doLogin(user);                break;        }    }    /**     * 获取用户信息并进行封装     * @return user     */    @Nullable    private User getUser() {        String username = mEtUsername.getText().toString().trim();        String password = mEtPassword.getText().toString().trim();        User user = null;        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {            Toast.makeText(MainActivity.this, "username or password can not be null", Toast.LENGTH_SHORT).show();        } else {            user = new User();            user.username = username;            user.password = password;        }        return user;    }    @Override    protected void onDestroy() {        super.onDestroy();        if (mUserBLL != null) {            mUserBLL = null;        }    }}

虽说重构之后的项目多了一些包和类,但是代码的可读性和后期项目的可维护性大大提高了,我们这么做无疑是值得的!

后记

学习是一件日积月累的过程,在之前的学习过程中没有写 blog 的习惯,在以后的工作学习中,我会用 blog 记录下值得跟大家分享的知识和点滴,同时欢迎大家阅读和指正,不足之处之处我会努力跟上,也欢迎大家跟我一起学习。

原创粉丝点击