Android MVP架構(3)MVP框架的使用

上一篇中主要介紹了MVP框架的基本實現過程,Android MVP架構(2)使用註解實現一個MVP框架

那麼實際過程中如何使用MVP框架呢。其實非常簡單。

MVP架構的主要目的就是進行解耦,同時使各部分的代碼邏輯層次分明,分工明確。鑑於這種思想,需要對功能類似的模塊進行規劃處理,以最基本的登錄註冊功能爲例,需要創建的目錄如圖:

可以看到,對比傳統的MVC架構,代碼文件彷佛增加了不少,但是層次卻更加分明瞭,通過嚴格的將模塊分爲MVP三層結構,使得拓展以及維護的可行性增加,閱讀性也更加良好。

以拓展一個登錄功能爲例,需要執行的步驟爲:

  • ILoginView 接口定義可能出現的登錄結果(失敗或成功)。

public interface ILoginView extends IBaseView {
    void onLoginSuccessful(String msg);
    void onLoginFail(int code, String error);
}

 

  • IUserPresenter 接口模擬用戶執行登錄的過程(提供賬號密碼)。
public interface IUserPresenter {
    void login(String username, String password);
}

 

  • Model進行網絡請求的實現。
public class UserModel extends BaseModel implements IUserModel {

    @Override
    public void login(String username, String password, IResponseListener listener) {
        Map<String, String> params = new HashMap<>();
        params.put("username",username);
        params.put("password",password);
        doPost("login",params, listener);
    }

}

 

  • Presenter中調用Model層的實現,並將數據回調給View層。
public class UserPresenter extends BasePresenter<ILoginView>
        implements IUserPresenter {

    @Inject private
    UserModel userModel;

    @Override
    public void login(String username, String password) {
        userModel.login(username, password, new IResponseListener() {
            @Override
            public void onSuccessful(Result data) {
                view.onLoginSuccessful(data.getMsg());
            }
            @Override
            public void onFailure(int errorCode, String errorMsg) {
                view.onLoginFail(errorCode, errorMsg);
            }
            @Override
            public void finished() {
            }
        });
    }

}

 

  • Activity中調用Presenter,處理所實現View的回調。
public class LoginActivity
        extends MvpActivity implements ILoginView {

    EditText nameView;
    EditText psdView;

    @Inject
    UserPresenter userPresenter;
    ProgressDialog dialog;

    @Override
    protected void initView() {
        super.initView();
        nameView = findViewById(R.id.nameView);
        psdView = findViewById(R.id.psdView);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void initData() {
        super.initData();
        dialog = new ProgressDialog(this);
    }

    public void login(View view) {
        String username = nameView.getText().toString().trim();
        String password = psdView.getText().toString().trim();
        userPresenter.login(username, password);
        dialog.setTitle("正在登錄。。。");
        dialog.show();
    }

    @Override
    public void onLoginSuccessful(String msg) {
        dialog.dismiss();
        Log.i(TAG, "onLoginSuccessful: " + msg);
        //User user = JSON.parseObject(msg, User.class);
        // TODO  處理返回的信息
    }

    @Override
    public void onLoginFail(int code, String error) {
        dialog.dismiss();
        toast(code + " : " + error);
    }

}

可以看到,在使用MVP架構之後,Activity的代碼得到了極大的簡化,開發人員可以專心的處理各個部分的邏輯功能。對於拓展,對源代碼的改動降到了最小,符合開閉原則。

最後貼一下源碼,有需要的小夥伴可以自行下載。資源下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章