MVC、MVP、MVVM模式對比總結(4)使用者登入例子

來源:互聯網
上載者:User

標籤:前言   ide   int   sub   converter   pos   --   new   ring   

前言說明

在實戰項目及學習中來總結一下Android端項目構架

包括MVC、MVP、MVVM,主要針對移動Android端

該篇以Android平台使用者登入狀態例子,用代碼來描述構架模式

代碼主要作理解,所以可能不完整,因為去掉一些精簡方便說明

 

目錄

1.構架基礎

2.橫向構架模型

3.縱向構架流程

4.使用者登入例子

 

 

4. 使用者登入例子

公用代碼

NetHelper網路通訊類

使用Retrofit+RxJava技術

NetHelper {    private static String baseUrl = "http://xxx/";    private static Retrofit retrofit = null;    private static OkHttpClient okHttpClient = null;    private static NetService netService;        static {        OkHttpClient.Builder okBuilder = OkHttpClient.Builder();        okBuilder.addInterceptor(new HttpLoggingInterceptor()            .setLevel(HttpLoggingInterceptor.Level.BODY));        okHttpClient = okBuilder.build();                Retrofit.Builder builder = new Retrofit.Builder();        retrofit = builder.baseUrl(baseUrl)                .client(sOkHttpClient)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        netService = sRetrofit.create(NetService.class);    }        public static NetService getNetService() {        reutrn netService;    }        public interface NetService {        @POST("login")        Observable<String> login(@Query("username") username, @Query("userpass") userpass);    }}

使用者業務UserBiz( model層)

UserBiz{    Observable<String> login(String username, String userpass) {        return NetHelper.getNetService.login(username, userpass);    }}

 

 

MVC例子代碼

布局檔案

<Layout>        <TextView id="username"/>        <TextView id="userpass"/>      <Button id="button" /></Layout>

登入介面LoginActivity( view層)

LoginActivity extends Activity{    String username;    String userpass;     void onCreate(Bundle bdle) {        setContentView(login_layout);                username = findById(username);        userpass = findById(userpass);                findById(button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                login();            }        });    }        void login() {        new UserManager()            .login(username, userpass)            .subscribe(new Action1<String>() {                @Override                public void call(String loginResultString) {                    if(loginResultString) {                        Toast.makeText(getApplicationContext(),                             username() + "--登入成功", Toast.LENGTH_SHORT).show();                    } else {                        Toast.makeText(getApplicationContext(),                             username() + "--登入失敗", Toast.LENGTH_SHORT).show();                    }                }            };    }}

使用者管理UserManager( controller層)

UserManager{    Observable<String> login(String username, String userpass) {        return new UserBiz().login(username, userpass)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread());    }}

使用者業務UserBiz( model層)

查看公用代碼

 

MVP例子代碼

布局檔案

<Layout>        <TextView id="username"/>        <TextView id="userpass"/>      <Button id="button" /></Layout>

登入介面LoginActivity( view層)

LoginActivity extends Activity impl IUserView{    String username;    String userpass;     void onCreate(Bundle bdle) {        setContentView(login_layout);                username = findById(username);        userpass = findById(userpass);                findById(button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new UserPresenter(this).login()            }        });        }        @Override    String getUserName() {        return username;    }    @Override    String getPassword() {        return userpass;    }        @Override    void showSuccess() {        Toast.makeText(getApplicationContext(),                 username() + "--登入成功", Toast.LENGTH_SHORT).show();    }        @Override    void showFailure() {        Toast.makeText(getApplicationContext(),                 username() + "--登入失敗", Toast.LENGTH_SHORT).show();    }}

使用者視圖介面IUserView( view層)

interface IUserView{    String getUserName();    String getUserPass();        void showSuccess();        void showFailure();}

使用者調配UserPresenter( presenter層)

UserPresenter{    IUserView userView;        UserPresenter(IUserView userView) {        this.userView = userView;    }    void login() {        new UserBiz().login(userView.getUserName(), userView.getUserPass())            .subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Action1<String>() {                @Override                public void call(String loginResultString) {                    if(loginResultString) {                        userView.showSuccess();                    } else {                        userView.showFailure();                    }                }            };    }}

使用者業務UserBiz( model層)

查看公用代碼

 

MVVM例子代碼

布局檔案

<layout>    <data>        <name="userViewModel"         type="com.test.viewModel.UserViewModel" />    </data>     <layout>        <TextView id="username"/>        <TextView id="userpass"/>        <Button id="button"           onclick="@{userViewModel.login}" />    </layout></layout>

登入介面LoginActivity( view層)

LoginActivity extends Activity{    void onCreate(Bundle bdle) {      MainBinding binding = DataBindingUtil.setContentView(this, login_layout);      binding.setViewModel(new UserViewModel(binding, this));    }}

使用者視圖模型UserViewModel( viewModel層)

UserViewModel{    String username;    String userpass;        Context context;        UserViewModel(MainBinding mainBinding, Context context) {      this.context = context;      username = mainBinding.username.getText().toString.trim();      userpass = mainBinding.userpass.getText().toString.trim();    }        void login() {        new UserBiz().login(username, userpass)            .subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Action1<String>() {                @Override                public void call(String loginResultString) {                    if(loginResultString) {                        Toast.makeText(context,                             username + "--登入成功", Toast.LENGTH_SHORT).show();                    } else {                        Toast.makeText(context,                             username + "--登入失敗", Toast.LENGTH_SHORT).show();                    }                }            };    }}

使用者業務UserBiz( model層)

查看公用代碼

 

MVC、MVP、MVVM模式對比總結(4)使用者登入例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.