2016-11-08 19 views
10

Nasza firma rozwijała aplikację na Androida, wykorzystując wzór MVP. W MVP umieszczamy całą logikę biznesową wewnątrz prezentera, a Activity/Fragment odpowiada za aktualizację widoku podczas odbierania wywołania zwrotnego od prezentera.Co należy zrobić w Activity/Fragment i ViewModel w MVVM

Teraz zdecydowaliśmy się wypróbować MVVM przy użyciu Android Databinding. Wydaje się, że dzięki MVVM możemy umieścić całą logikę biznesową w ViewModel (podobnie jak Presenter w MVP), a także powiadamiać widok (y) o wszelkich zmianach w modelu danych, wszystko w jednym obiekcie.

Ale to pytanie rodzi się w naszym umyśle, co powinniśmy zostawić, aby poradzić sobie z Działaniem/Fragmentem? Ponieważ przyjęliśmy wzór MVP, aby uniknąć działania tłuszczu/fragmentu /fragmentu. Nie chcemy mieć cienkiej aktywności/fragmentu , a następnie fat-viewmodel.

Co myślimy, że możemy w lewo będzie obsługiwać przez działanie/Fragment dotychczas

  • Zapytanie/Sprawdź pozwolenie
  • Dostęp Kontekst
  • dostęp do zasobów

Każda korekta, komentarz lub sugestie są mile widziane, ponieważ jestem całkiem nowy w MVVM, nawet jeśli wydaje się, że jest podobny do MVP.

Dziękuję.

Nieco bardziej kwestia

Czy to możliwe, i dobra praktyka, aby połączyć MVVM z słuchacza (jak MVP)? Na przykład

public class MainActivityViewModel extends BaseObservable { 

    MainActivityViewModelListener listener; 
    User user; 

    public void setMainActivityViewModelListener(MainActivityViewModelListener listener) { 
     this.listener = listener; 
    } 

    public void refreshUser(View v) { 
     // some user update via Internet 
     notifyPropertyChanged(BR.userAlias); 

     if (listener != null) { 
      listener.onUserRefreshed(user); 
     } 
    } 

    @Bindable 
    public void getUserAlias() { 
     return user.getAlias(); 
    } 
} 

public interface MainActivityViewModelListener { 
    void onUserRefreshed(User user); 
} 

public class MainActivity implements MainActivityViewModelListener { 

    MainActivityBinding binding; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     binding = DataBindingUtil.setContentView(R.layout.main_activity); 


     MainActivityViewModel viewModel = new MainActivityViewModel(); 
     viewModel.setMainActivityViewModelListener(this); 
     binding.setMainActivityViewModel(viewModel); 
    } 

    @Override 
    public void onUserRefreshed(User user) { 
     // do some update 
    } 
} 

Odpowiedz

5

Tak można mieć całą logikę biznesową w Twojej ViewModel, Oto kilka linków, które ja osobiście następująco nauczyć MVVM

Approaching Android with MVVM
https://github.com/ivacf/archi
MVVM on Android: What You Need to Know

Można wspomnieć wszyscy twoi słuchacze w ViewModel, a także dane, które będzie składał twój model.

ViewModel zmienia niektóre treści i powiadamia o wiążącej strukturze, która uległa zmianie.

model - model danych zawierające logikę biznesową i walidacja
View - definiuje strukturę, układ i wygląd widoku na ekranie
ViewModel - działa związek między View i model, do czynienia z jakimkolwiek widzenia logika

enter image description here

reference

+0

+ 1 link Github. Przeszedłem kilka tutoriali i wypróbowałem jedną przykładową implementację, przykład projektu bardzo pomoże! –

+0

możesz odnieść [to] (http://stackoverflow.com/a/40479052/3134215) również po więcej. –

+0

Hej! @RaviRupareliya, fragmenty transakcji i animacje powinny być wykonane na działanie? –

0

Odpowiedź na pytanie, które można wykorzystać słuchaczy interfejsu wewnątrz MVVM tak jak ty w MVP? Jest tak, ale wzór jest nieco inna kod u wspomniano

public interface MainActivityViewModelListener { 
void onUserRefreshed(User user); 

jest ok dla projektów typu MVP ale dla MVVM należy użyć właściwego obserwator zarejestrować i wyrejestrować wzorzec tym zgłaszających obserwatorów.

w mvp bezpośrednio wywołujemy funkcję interfejsu, ale wzorzec obserwatora w mvvm różni się od tych prostych interfejsów. Wzorzec obserwatora obejmuje rejestrację podmiotu w klasie klienta.

jeśli chcesz jak dokładnie działa MVVM zobaczyć tutaj https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat

to prosta aplikacja, z taką samą funkcjonalność, ale napisany w trzech różnych formatach, aby dać jasny obraz tego, różnica pomiędzy mvp MVVM i MVC

Powiązane problemy