2016-11-08 3 views
10

당사는 MVP 패턴을 사용하여 Android 애플리케이션을 개발하고 있습니다. MVP를 사용하면 모든 비즈니스 로직을 발표자에 배치하고 Activity/Fragment는 발표자로부터 이벤트 콜백을받을 때보기 업데이트 만 담당합니다.MVVM의 Activity/Fragment 및 ViewModel에서 수행해야 할 작업

이제 Android Databinding을 사용하여 MVVM을 사용해보기로했습니다. MVVM을 사용하면 모든 비즈니스 로직을 ViewModel (MVP의 Presenter처럼)에 넣을 수 있고 데이터 모델에 대한 변경 사항을 하나의 객체에 모두 알릴 수 있습니다.

하지만 우리의 마음 속에 제기되는이 질문에 대해 우리는 활동/단편에 의해 어떻게 처리되어야 하는가? 우리는 fat-activity/fragment을 피하기 위해 MVP 패턴을 채택했기 때문에. 슬림 액티비티/프래그먼트 다음으로 fat-viewmodel을 갖고 싶지 않습니다. 우리는/조각 지금까지

  • 요청/허락을
  • 액세스 문맥
  • 액세스 자원

모든 보정, 주석을 점검 활동에 의해 처리 될 왼쪽으로 할 수 있다고 생각 무엇

또는 제안은 MVP와 비슷하다고해도 MVVM에 상당히 익숙하므로 환영합니다.

감사합니다.

조금 더 질문

가 가능하고 좋은 습관 (MVP 같은) 리스너 MVVM을 결합? 예를 들어

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

답변

5

예 당신이 당신의 ViewModel의 모든 비즈니스 로직을 가질 수 있습니다, 여기에 내가 personaly MVVM

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

당신은 언급 할 내용은 다음 몇 가지 링크가 있습니다 ViewModel의 모든 리스너와 모델이 구성하는 데이터

ViewModel은 일부 콘텐츠를 변경하고 콘텐츠가 변경되었다는 것을 바인딩 프레임 워크에 알립니다.

모델 - 비즈니스 및 검증 로직을 포함하는 데이터 모델
보기 - 어떤 보기 다루는 뷰와 모델 사이의 링크를 행 - 은
뷰 모델은 구조, 레이아웃 및 화면 뷰의 모양을 정의합니다 논리

enter image description here

reference

+0

+ 1 Github 링크. 지금까지 여러 튜토리얼을 살펴본 후 하나의 구현 샘플을 시도해 보았습니다. 프로젝트 예제가 많은 도움이됩니다! –

+0

자세한 내용은 [this] (http://stackoverflow.com/a/40479052/3134215)를 참조하십시오. –

+0

안녕하세요! @RaviRupareliya, 프래그먼트 트랜잭션과 애니메이션은 Activity에서 수행되어야합니까? –

0

활동에 리스너를 설정하지 마십시오.

가능한 한 로직을 ViewModel에 써야합니다.

얼마 전에 MVVM (Databinding) 데모를 작성했습니다.

은 당신에게 도움이되기를 바랍니다 :

https://github.com/adgvcxz/Dribbble-MVVM

0

당신이 MVP에서와 마찬가지로 MVVM 내부 인터페이스 리스너를 사용할 수 있습니다 귀하의 질문에 대한 대답? 예이지만 패턴은 유

public interface MainActivityViewModelListener { 
void onUserRefreshed(User user); 

MVP 형 설계를위한 괜찮 언급 코드 조금 다른 하지만 MVVM 대해 적절한 관찰자가 등록 통지 관찰자 포함 패턴의 등록을 취소 사용해야합니다.

in mvp 인터페이스 함수를 직접 호출하지만 mvvm의 관찰자 패턴은이 간단한 인터페이스와 완전히 다릅니다. Observer 패턴은 클라이언트 클래스와 Subject 등록을 포함합니다.

당신이 MVVM의 작품이 MVP의 MVVM과 MVC의 차이에 대한 명확한 아이디어를 제공하는 간단한 같은 기능을 가진 응용 프로그램이 있지만, 세 가지 다른 형식으로 작성된 여기 https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat

를 볼 방법을 정확하게하려는 경우