Upload
florina-muntenescu
View
2.564
Download
0
Embed Size (px)
Citation preview
@FMuntenescu
class User {String firstName;String lastName;…
}
displayName = lastName + “, “ + firstName
@FMuntenescu
class User {String firstName; JaneString lastName; Doe…
}
displayName = Doe, JanelastName + “, “ + firstName
@FMuntenescu
View?User user = userModel.getUser();
nameTextView.setText(user.getLastName() + ", " + user.getFirstName())
@FMuntenescu
IUserModel userModel;
IView view;
Presenter(IUserModel userModel,IView view) {
this.userModel = userModel;this.view = view;
}
@FMuntenescu
IUserModel userModel;
IView view;
Presenter(IUserModel userModel,IView view) {
this.userModel = userModel;this.view = view;
}
@FMuntenescu
@Overridepublic void onLoad() {
User user = userModel.getUser();String displayName =
user.getFirstName()+ ", " + user.getLastName();
view.setName(displayName);}
@FMuntenescu
@Overridepublic void onLoad() {
User user = userModel.getUser();String displayName =
user.getFirstName()+ ", " + user.getLastName();
view.setName(displayName);}
@FMuntenescu
@Overridepublic void onLoad() {
User user = userModel.getUser();String displayName =
user.getFirstName()+ ", " + user.getLastName();
view.setName(displayName);}
@FMuntenescu
@MockIUserModel userModel;
@MockIView view;
Presenter presenter;
@Beforepublic void setup() {
…presenter =
new Presenter(userModel, view);}
@FMuntenescu
@MockIUserModel userModel;
@MockIView view;
Presenter presenter;
@Beforepublic void setup() {
…presenter =
new Presenter(userModel, view);}
@FMuntenescu
@Testpublic void displayName_setOnLoad() {when(userModel.getUser())
.thenReturn(new User(“Jane”, “Doe”);
presenter.onLoad();
verify(view).setName(“Doe, Jane”);}
@FMuntenescu
@Testpublic void displayName_setOnLoad() {when(userModel.getUser())
.thenReturn(new User(“Jane”, “Doe”);
presenter.onLoad();
verify(view).setName(“Doe, Jane”);}
@FMuntenescu
@Testpublic void displayName_setOnLoad() {when(userModel.getUser())
.thenReturn(new User(“Jane”, “Doe”);
presenter.onLoad();
verify(view).setName(“Doe, Jane”);}
@FMuntenescu
@Testpublic void displayName_setOnLoad() {when(userModel.getUser())
.thenReturn(new User(“Jane”, “Doe”);
presenter.onLoad();
verify(view).setName(“Doe, Jane”);}
@FMuntenescu
IUserModel userModel;IView view;Presenter(IUserModel userModel, IView view) {
this.userModel = userModel;this.view = view;
}
void onLoad() {…
view.setName(displayName);}
@FMuntenescu
IUserModel userModel;IView view;Presenter(IUserModel userModel, IView view) {
this.userModel = userModel;this.view = view;
}
void onLoad() {…
view.setName(displayName);}
Observable<String> getName() {…
}
@FMuntenescu
class View {
…viewModel.getName()
.subscribe(name-> setName(name));
…private void setName(String name){
nameTextView.setText(name);
}
@FMuntenescu
IUserModel userModel;IView view;
Presenter(IUserModel userModel, IView view) {
userModel = userModel;view = view;
}
@FMuntenescu
class User {String firstName; JaneString lastName; Doe
Date dateOfBirth; 04.04.1987}
Name: Doe, JaneAge: 29
@FMuntenescu
class ViewModel {
Observable<String> getName() {… }
Observable<Integer> getAge() {… }
}
@FMuntenescu
class DisplayableUser {String mName;int mAge;
}
class ViewModel {
Observable<DisplayableUser> getUser() {…
}}
@FMuntenescu
@MockIUserModel userModel;
ViewModel viewModel;
@Beforevoid setup() {
…viewModel = new ViewModel(userModel);
}
@FMuntenescu
@MockIUserModel userModel;
ViewModel viewModel;
@Beforepublic void setup() {
…viewModel = new ViewModel(userModel);
}
@FMuntenescu
@Testpublic void getUser_emitsCorrectValue() {when(userModel.getUser())
.thenReturn(new User(“Jane”,”Doe”, new Date(4,4,1987));
viewModel.getUser().subscribe(testSubscriber);
testSubscriber.assertValue(expectedUser);}
@FMuntenescu
@Testpublic void getUser_emitsCorrectValue() {when(userModel.getUser())
.thenReturn(new User(“Jane”,”Doe”, new Date(4,4,1987));
viewModel.getUser().subscribe(testSubscriber);
testSubscriber.assertValue(expectedUser);}
@FMuntenescu
@Testpublic void getUser_emitsCorrectValue() {when(userModel.getUser())
.thenReturn(new User(“Jane”,”Doe”, new Date(4,4,1987));
viewModel.getUser().subscribe(testSubscriber);
testSubscriber.assertValue(expectedUser);}
@FMuntenescu
@Testpublic void getUser_emitsCorrectValue() {when(userModel.getUser())
.thenReturn(new User(“Jane”,”Doe”, new Date(4,4,1987));
viewModel.getUser().subscribe(testSubscriber);
testSubscriber.assertValue(expectedUser);}
@FMuntenescu
class Presenter {void onLoad() {
…view.setName(displayName);
}}
class ViewModel {Observable<String> getName() {
…}
}
@FMuntenescu
<RelativeLayout><my.custom.SomeView /><my.custom.AnotherView />
</RelativeLayout>
Fragment
SomeView
AnotherView
@FMuntenescu
<RelativeLayout><my.custom.SomeView /><my.custom.AnotherView />
</RelativeLayout>
Fragment
SomeView
AnotherView
NewView
@FMuntenescu
<RelativeLayout><my.custom.SomeView /><my.custom.NewView /><my.custom.AnotherView />
</RelativeLayout>
Fragment
AnotherView
NewView
@FMuntenescu
@Overrideprotected void onResume() {
…presenter.onLoad();
}
@Overrideprotected void onPause() {
presenter.onStopLoad();…
}
@FMuntenescu
@Overrideprotected void onResume() {
…presenter.onLoad();
}
@Overrideprotected void onPause() {
presenter.onStopLoad();…
}
@FMuntenescu
@Overrideprotected void onResume() {
…viewModel.getDataStream()
.subscribe(…);}
@Overrideprotected void onPause() {
// unsubscribe…
}
@FMuntenescu
@Overrideprotected void onResume() {
…viewModel.getDataStream()
.subscribe(…);}
@Overrideprotected void onPause() {
// unsubscribe…
}
@FMuntenescu
@Overridevoid onAttachedToWindow() {
presenter.onLoad();…
}
@Overridevoid onDetachedFromWindow() {
…presenter.onStopLoad();
}
@FMuntenescu
@Overridevoid onAttachedToWindow() {
presenter.onLoad();…
}
@Overridevoid onDetachedFromWindow() {
…presenter.onStopLoad();
}
@FMuntenescu
@Overridevoid onAttachedToWindow() {
viewModel.getDataStream().subscribe(…);
…}
@Overridevoid onDetachedFromWindow() {
…// unsubscribe
}
@FMuntenescu
@Overridevoid onAttachedToWindow() {
viewModel.getDataStream().subscribe(…);
…}
@Overridevoid onDetachedFromWindow() {
…// unsubscribe
}
@FMuntenescu
@Overridevoid onSaveInstanceState(Bundle state) {
state.putAll(presenter/viewModel.getState());
}
@Overridevoid onRestoreInstanceState(Bundle state) {
presenter/viewModel.restoreState(state);
}
@FMuntenescu
@Overridevoid onSaveInstanceState(Bundle state) {
state.putAll(presenter/viewModel.getState());
}
@Overridevoid onRestoreInstanceState(Bundle state) {
presenter/viewModel.restoreState(state);
}
@FMuntenescu
@OverrideParcelable onSaveInstanceState() {
// save state}
@Overridevoid onRestoreInstanceState(
Parcelable state) {// restore state
}
@FMuntenescu
A Journey Through MVWonderland
GoogleArchitectureBlueprintshttps://github.com/googlesamples/android-architecture
MVPvsMVVMexamplehttps://github.com/florina-muntenescu/MVPvsMVVM
https://upday.github.io/