美文网首页Android架构模式设计
Android架构设计---MVC模式探讨

Android架构设计---MVC模式探讨

作者: ZebraWei | 来源:发表于2018-01-07 21:24 被阅读16次

    **版权声明:本文为小斑马伟原创文章,转载请注明出处!


    MVC架构:模型(Model)-视图(View)-控制器(Controller)的缩写,一种典型的软件架构。将业务逻辑聚合在一起,在修改界面时不需要修改业务逻辑。用于隔离业务逻辑、数据、界面展示。
    Model模型:处理业务逻辑数据(网络请求,数据库存取,算法操作等)。
    View视图:对应的UI布局如layout.xml,用于显示M层数据结果。
    Controller控制器:Activity和Fragment,获取V层的数据,并向M层发起请求。
    一、MVC的优缺点

    优点:便于理解,开发快速,一定程度隔离业务于UI的耦合度
    缺点:业务复杂有可能导致Controller爆炸,不利于维护迭代。

    二、Model层设计分析

    登录界面的需求:Model层包含登录的数据(UserName\PassWord)以及网络请求。
    登录逻辑接口

    public interface UserLogicModel {
    
        void login(String account,String password,UserLoginListener userLoginListener);
    
    }
    

    登录成功或者失败回调的接口

    public interface UserLoginListener {
        void LoginSuccess();
    
        void LogicFailed();
    }
    

    登录接口的实现

    public class UserLoginModelImpl implements  UserLogicModel {
    
    @Override
    public void login(final String account, final String password, final UserLoginListener userLoginListener) {
          //这里是处理登陆的业务逻辑
        Log.d("logic","登录中");
        new Handler().postDelayed(new Runnable(){
    
            @Override
            public void run() {
                if("weiwei".equals(account) && "123".equals(password)) {
                    userLoginListener.LoginSuccess();
                } else {
                    userLoginListener.LogicFailed();
                }
            }
        },3000);
    }
    }
    
    三、View层设计分析

    UI界面的编写

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="16dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="16dp"
        tools:context="mvc.allure.com.mvxproject.MainActivity">
    
    <ImageView
        android:layout_marginTop="56dp"
        android:src="@mipmap/ic_launcher"
        android:layout_gravity="center_horizontal"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    
    <android.support.design.widget.TextInputLayout
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <EditText
            android:id="@+id/edit_account"
            android:hint="用户名"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        </android.support.design.widget.TextInputLayout>
    
    <android.support.design.widget.TextInputLayout
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <EditText
            android:id="@+id/edit_password"
            android:hint="密码"
            android:inputType="textPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>
    
    <android.support.v7.widget.AppCompatButton
        android:text="登录"
        android:layout_marginTop="24dp"
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">>
    </android.support.v7.widget.AppCompatButton>
    <android.support.v7.widget.AppCompatButton
        android:text="清空"
        android:layout_marginTop="24dp"
        android:id="@+id/btn_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">>
    </android.support.v7.widget.AppCompatButton>
    </LinearLayout>
    
    三、Controller层设计分析

    Controller作为Activity/Fragment的综合控制

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private EditText editAccount;
    private EditText editPassWord;
    private AppCompatButton btnLogin;
    private AppCompatButton btnClear;
    private UserLogicModel logicModel;
    
    private ProgressDialog progressDialog;
    
    private String account ="";
    private String password ="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        logicModel = new UserLoginModelImpl();
        initView();
        initListener();
    }
    
    private void initListener() {
        btnLogin.setOnClickListener(this);
        btnClear.setOnClickListener(this);
    }
    
    private void initView() {
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("login process,Watting...");
        progressDialog.setCancelable(false);
        editAccount = (EditText)findViewById(R.id.edit_account);
        editPassWord = (EditText)findViewById(R.id.edit_password);
        btnLogin = (AppCompatButton)findViewById(R.id.btn_login);
        btnClear = (AppCompatButton)findViewById(R.id.btn_delete);
    }
    
    @Override
    public void onClick(View view) {
        switch(view.getId()) {
            case R.id.btn_login:
                account = editAccount.getText().toString();
                password = editPassWord.getText().toString();
                 progressDialog.show();
                logicModel.login(account, password, new UserLoginListener() {
                    @Override
                    public void LoginSuccess() {
                        Log.i("aa","login success!!!");
                        Toast.makeText(MainActivity.this,"login success!!!",Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                    }
    
                    @Override
                    public void LogicFailed() {
                       Log.i("aa","login fail!!!");
                        Toast.makeText(MainActivity.this,"login fail!!!",Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                    }
                });
                break;
            case R.id.btn_delete:
                editAccount.setText("");
                editPassWord.setText("");
                break;
           }
       }
    }
    

    MVC适用于项目初期,业务不复杂的场景。设计架构的目的:为了后期程序的开发于维护,使程序模块化,做到模块内部的高聚合和模块与模块的低耦合。注意不能为了设计而设计,架构而架构,针对不同的项目的大小,时间维度等选取不同的架构设计。

    相关文章

      网友评论

        本文标题:Android架构设计---MVC模式探讨

        本文链接:https://www.haomeiwen.com/subject/omvmnxtx.html