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