2016-10-06 6 views
2

私はこのMVVMをAndroidアプリに使用しようとしています。私は多くのアプリをやってきましたが、私は別のレベルにステップアップし、MVVMを使用しようとしています。しかし、私はインターネットからデータをロードすべき場所を理解する必要があります。 RxJavaを使用していますが、ViewModelでのみデータをロードする必要があるかどうかはわかりません。もしそうなら、どこでデータを設定しますか?私はGoogleからDatabindingを使用していますが、viewModelを通じてxmlにデータを設定したくありません。私はjavaファイルから設定したいと思います。MVVM - インターネットからデータをロードする場所

私が何かを訂正して回答を投稿した場合、申し訳ありませんが、私は必要な情報を記入しようとします。

答えて

1

"データロードのトリガ"は、プレゼンテーションロジックの一部です。したがって、これはViewModelに属している必要があります。

ネットワークロジックなどの「データがどのように読み込まれるか」に関する詳細は、ViewModelレイヤに属しません。すでにRxJavaを使用しているので、Retrofitを使用することを強くお勧めします。

rx.Observabledatabinding.ObservableFieldは非常によく似ていますので、1つの形式から別の形式に変換できます。私はあなたがこれを行うことを可能にするlibraryを書いています。実装については、FieldUtils.javaを参照してください。

いずれかの方法は、あなたがDataServiceインタフェース/クラスを持っていると仮定すると:

public interface DataService { 
    Observable<String> loadSomeData(); 
} 

を次のように、あなたのViewModelを構築することができます:

public class ExampleViewModel { 
    ObservableField<String> title; 

    public ExampleViewModel(DataService dataService) { 
     this.title = FieldUtils.toField(dataService.loadSomeData()); 
    } 
} 

を次に、あなたはデータバインディング使用して、あなたのビューでこれを表示することができます構文

<TextView 
    android:text="@{viewModel.title}" /> 

最近、私はRxJava wi MVVM。私はRetrofitを使ってGithubからイベントのリストをロードしてRecyclerViewに表示するアプリケーションを示した。これはMVVMに実装されています。

記事へのリンク: MVVM using RxJava + Data Binding example: Loading data using Retrofit

もロードインジケータとエラーを示して、より複雑な例:DataLoadingViewModel.javaを。

+0

ありがとうございます。感謝します。悲しいことに、私はそれを自分で難しい方法で習得しなければなりませんでした(他のプロジェクトを勉強するのは数日しかかかりませんでした)。回答に戻ると、私は実際にRxJavaで自分のプロジェクトでRetrofitを使用しています。私は、ViewModelにデータをロードする必要があることを理解しており、バインディングはそこに設定されています。しかし、たとえば、ビュー(アクティビティ)でRecyclerViewを設定することが適切かどうかはわかりません。また、ObservableFieldの代わりに@Bindableを使用するのはなぜですか(少なくとも私にとっては同じように見えますが)。もう一度ありがとうございます:) – Bartando

0

MVPとMVVMの2つの類似したアーキテクチャパターンがあります。主な違いは、MVP parttern Presenterではデータの表示方法が必要ですが、MVVMパターンビューではModelを受け取り、レンダリングすることです(モデルからデータを取得する)。従来のMVVMの例はview bindigです。しかし、ポイントはあなたがどのパターンを使用するか、Modelのすべてのデータを取得し、すべてのビジネスロジックをModelに配置する必要があります。

+0

それを正しく理解すれば、ViewModelでデータを読み込み、作業して保存し、ViewModel経由でViewに設定する必要があります。したがって、View自体にはデータ操作がほとんどありません。すみません、パターンを正しく理解しようとしています。 – Bartando

関連する問題