MVC, MVP, MVVM Model Comparison summary (4) User Login Example

Source: Internet
Author: User

Preface description

In the actual combat project and study to summarize the Android Terminal Project framework

Includes MVC, MVP, MVVM, primarily for mobile Android

This article uses the Android platform user login As an example to describe the architecture pattern in code

The code is primarily understood, so it may not be complete, as it removes some of the streamlining and convenience instructions

Directory

1. Framework Basics

2. Transverse frame model

3. Vertical structure Process

4. User Login Example

4. User Login Example

Public code

Nethelper network Communication class

Using Retrofit+rxjava Technology

Nethelper {Private StaticString baseUrl = "http://xxx/"; Private StaticRetrofit Retrofit =NULL; Private StaticOkhttpclient okhttpclient =NULL; Private StaticNetservice Netservice; Static{okhttpclient.builder Okbuilder=Okhttpclient.builder (); Okbuilder.addinterceptor (Newhttplogginginterceptor (). SetLevel (HttpLoggingInterceptor.Level.BODY)); Okhttpclient=Okbuilder.build (); Retrofit.builder Builder=NewRetrofit.builder (); Retrofit=Builder.baseurl (BASEURL). Client (sokhttpclient). Addconverterfactory (Gsonconverterfacto        Ry.create ()). Addcalladapterfactory (Rxjavacalladapterfactory.create ()). build (); Netservice= Sretrofit.create (Netservice.class); }         Public StaticNetservice Getnetservice () {reutrn netservice; }         Public InterfaceNetservice {@POST ("Login") Observable<String> Login (@Query ("username") Username, @Query ("Userpass") userpass); }}

User Business userbiz (model layer)

userbiz{    observable<string> Login (string username, string userpass) {        return  NetHelper.getNetService.login (username, userpass);}    } 

MVC Example Code

Layout file

<Layout>        <textview id= "username"/>        <textview id= "Userpass"/> <button    id= " Button "/></layout>

Login Interface loginactivity (view layer)

Loginactivityextendsactivity{String username;     String Userpass; voidonCreate (Bundle bdle) {Setcontentview (login_layout); Username=FindByID (username); Userpass=FindByID (Userpass); FindByID (Button). Setonclicklistener (NewView.onclicklistener () {@Override Public voidOnClick (View v) {login ();    }        }); }        voidLogin () {NewUsermanager (). Login (username, userpass). Subscribe (NewAction1<string>() {@Override Public voidCall (String loginresultstring) {if(loginresultstring) {Toast.maketext (Getapplicationcontext (), Usern Ame ()+ "--Login Success", Toast.length_short). Show (); } Else{Toast.maketext (Getapplicationcontext (), username ()+ "--Login Failed", Toast.length_short). Show ();    }                }            }; }}

User Management Usermanager (Controller layer)

usermanager{    Observable<String> Login (string username, string userpass) {          Returnnew  userbiz (). Login (username, userpass).                Subscribeon (Schedulers.io ())                . Observeon (Androidschedulers.mainthread ());}    }

User Business userbiz (model layer)

View common Code

MVP Example Code

Layout file

<Layout>        <textview id= "username"/>        <textview id= "Userpass"/> <button    id= " Button "/></layout>

Login Interface loginactivity (view layer)

LoginactivityextendsActivity impl iuserview{String username;     String Userpass; voidonCreate (Bundle bdle) {Setcontentview (login_layout); Username=FindByID (username); Userpass=FindByID (Userpass); FindByID (Button). Setonclicklistener (NewView.onclicklistener () {@Override Public voidOnClick (View v) {NewUserpresenter ( This). Login ()}); } @Override String GetUserName () {returnusername; } @Override String GetPassword () {returnUserpass; } @Overridevoidshowsuccess () {Toast.maketext (Getapplicationcontext (), username ( )+ "--Login Success", Toast.length_short). Show (); } @Overridevoidshowfailure () {Toast.maketext (Getapplicationcontext (), username ( )+ "--Login Failed", Toast.length_short). Show (); }}

User View interface Iuserview (view layer)

Interface iuserview{    String getusername ();    String Getuserpass ();         void showsuccess ();         void showfailure ();}

User Provisioning Userpresenter (presenter layer)

userpresenter{Iuserview Userview; Userpresenter (Iuserview userview) { This. Userview =Userview; }    voidLogin () {Newuserbiz (). Login (Userview.getusername (), Userview.getuserpass ()). Subscribeon (Schedulers.io ()). Observeon (Androidschedulers.mainthread ()). Subscribe (NewAction1<string>() {@Override Public voidCall (String loginresultstring) {if(loginresultstring) {userview.showsuccess (); } Else{userview.showfailure ();    }                }            }; }}

User Business userbiz (model layer)

View common Code

MVVM Example Code

Layout file

<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>

Login Interface loginactivity (view layer)

extends activity{    void  onCreate (Bundle bdle) {      = Databindingutil.setcontentview (  this, login_layout);      Binding.setviewmodel (newthis));}    }

User View model Userviewmodel (ViewModel layer)

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 (); }        voidLogin () {Newuserbiz (). Login (username, userpass). Subscribeon (Schedulers.io ()). Observeon (androidschedulers. Mainthread ()). Subscribe (NewAction1<string>() {@Override Public voidCall (String loginresultstring) {if(loginresultstring) {toast.maketext (context, username+ "--Login Success", Toast.length_short). Show (); } Else{toast.maketext (context, username+ "--Login Failed", Toast.length_short). Show ();    }                }            }; }}

User Business userbiz (model layer)

View common Code

MVC, MVP, MVVM Model Comparison summary (4) User Login Example

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.