web-dev-qa-db-ja.com

Android MVVM設計パターンの例

私は現在多くのWPF開発を行っており、いくつかの基本的なAndroidアプリを作成し始めています。WPFアプリを作成するときは、通常Prismを使用してAndroidプラットフォームのMVVM?

63
Tom Dudfield

私は Android-Binding の開発者です。 @Brentleyが言ったように、それは非常に新しいプロジェクトですが、改善できるように、より多くの話題と経験を得たいと思っています。質問に戻って、Androidバインディングを使用したMVVMの簡単な紹介/チュートリアルを書きました。

潜在的な採用者は、 プロジェクトディスカッショングループにも登録してください。

84
xandy

私は時々ViewModelsを使用して純粋なモデルからモデルを表示するものに変換しますが、MVVM主義の多くは、この大規模なデータバインディングエンジンがWPFフレームワークに組み込まれているという事実に由来しています。おそらく、WPF + MVVMの正確なエクスペリエンスはAndroidの世界では見つかりませんが、多くの優れたコンセプトを取り入れて(自動データバインディングなどなしで)実装できます。

1つは、ViewModelを作成するだけです。 ViewModelを作成するためにPrismのようなフレームワークは必要ありません。 PropertyChangedの通知やそのようなものをすべて持っているわけではありませんが、データを、コードをクリーンアップするUIでより適切に使用できる情報に変換できます。これの完璧な例は、スライダーが重いUIで行ったことです。 AndroidのSeekBarは常にゼロベースであり、整数値で動作するため、モデルの最小値、最大値、増分値にバインドすることはできません。 ViewModelを使用して、最小値/最大値を、SeekBarが使用できる0から始まる同等の値に変換できます...単なる例です。同じことが、値の範囲などに基づいて色やサイズを表示する場合にも当てはまります。私にとっては、それがViewModelのすべてです。

DependencyInjectionに関しては、RoboGuiceをご覧ください。地元のMeetupで作成者によるプレゼンテーションを見た後、私のプロジェクトの1つでこれを使い始めたばかりで、おそらくあなたが探しているものです。

Google CodeのRoboGuice

RoboGuice Google Group

7
Rich

現在、公式のAndroid Data Binding Pluginがまだベータ版ですが、ベータ版のAndroid Studio。

詳細については、以下を参照してください

https://developer.Android.com/tools/data-binding/guide.html

4
Ody

Android-Data-Binding ライブラリは、データをユーザーインターフェイス要素に接続するためのツールです。レイアウトファイルが作成され、各アイテムにタグが付けられると、1行のコードですべてのデータがユーザーインターフェイス要素にバインドされ、他のタスクの時間を節約できます。

3
furkan3ayraktar

すばらしいです! Articals by @ Florina Muntenesc

Model-View-ViewModelパターン

MVVMパターンの主なプレーヤーは次のとおりです。

  • ビュー—ユーザーのアクションをViewModelに通知します
  • ViewModel — Viewに関連するデータのストリームを公開します
  • DataModel —データソースを抽象化します。 ViewModelはDataModelと連携してデータを取得および保存します。

MVVMアーキテクチャの例:

https://github.com/erikcaffrey/People-MVVM

https://github.com/googlesamples/Android-architecture/tree/todo-mvvm-databinding/

https://github.com/iammert/Android-MVVM-Architecture

https://github.com/segunfamisa/Android-mvvm-sample

https://github.com/manas-chaudhari/Android-mvvm

3
Dhaval Jivani

Android-binding と呼ばれるViewModelsにビューをバインドできるようにする比較的新しいフレームワークが開発されています。このフレームワークと RoboGuice を使用して、MVVMを取得できます。フレームワークにはまだいくつかの作業が必要ですが、それは良い出発点です。

3
Brentley Jones

最近、データバインディングライブラリを使用してAndroidアプリをビルドするためのMVVMパターンを実装しました。ここで、私が行った作業とコードフラグメントの詳細なレビューを読むことができます: http://cases.azoft.com/mvvm-Android-data-binding/

トピックの詳細については、次のアプリサンプルもご覧ください: https://github.com/ivacf/archi

検索およびリスト画面で行われた作業の視覚的な例があります。

数年前、WPF&WPの開発も行っています。Prism&MVVM Light Toolkitは、WPアプリをビルドするのによく使用されます。WindowsPhoneアプリケーションアーキテクチャに最適です! of WP development then create to createAndroid MVVM Light Toolkit(ビルドするためのツールキットヘルプAndroid MVVMアプリケーション、Viewのデータバインディング(ImageViewのUriなど)の属性がさらにあり、イベント(Buttonのクリックなど)に対処するためのコマンドを作成し、他のViewModelと通信するためのグローバルメッセージパイプもあります。 。

GitHub:Android MVVM Light Toolkit 、参照用のサンプルがあります。

アーキテクチャ:http://upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/ strip%7CimageView2/2/w/124

あなたを助けることを願っています!

2
KelinHong

MVVMCross というプロジェクトが1つあります。

Stuart Lodgeが開発した、無料のオープンソースで適切に設計されたMVVMフレームワークです。

彼はAndroidおよびiPhoneのバインディングを実装したため、MVVMはこれらすべてのプラットフォームにも適用可能になりました。

私にとってそれは最高のMVVMフレームワークの1つです。MVVMの力を実際に示しています。これを使用すると、異なるプラットフォーム(WP7、Android、iPhone、WinRT)に1つのコード(モデルおよびビューモデルレイヤー)を記述し、アプリケーションUI(ビューレイヤー)を変更することができます。

1
gerichhome

興味があるかもしれない他の人々への参照として投稿するだけです。私は RoboBinding -Androidプラットフォーム用のデータバインディングプレゼンテーションモデルフレームワークに貢献しています。同じ目的のための別のフレームワークです。プロジェクト構造の支援とは別に、RoboBindingの主な焦点の1つは、Android単体テストではなく、通常のJUnitテストでAndroidアプリをテストできるようにすることです。プロジェクトの品質は向上しますが、Android単体テストの実行には時間がかかり、単体テストはやや実用的ではありません。 RoboBinding には、品質を保証するために300を超えるJUnitテストが付属しています。 [〜#〜] mvvm [〜#〜] Martin Fowlerによって導入されたプレゼンテーションモデルのデザインパターンの特殊化としてMicrosoftから発信されました。その他の代替手段:Android-Binding、Bindroid、およびMvvmCross。

1
Cheng

https://github.com/MindorksOpenSource/Android-mvvm-architecture

Android MVVMアーキテクチャ:サンプルアプリ

このリポジトリには、Dagger2、Room、RxJava、FastAndroidNetworking、PlaceHolderView、AndroidDebugDatabaseを使用してMVVMアーキテクチャを実装する詳細なサンプルアプリが含まれています

アプリには次のパッケージがあります。

data: It contains all the data accessing and manipulating components.
di: Dependency providing classes using Dagger2.
ui: View classes along with their corresponding ViewModel.
utils: Utility classes.
0
mohit issar

GithubにはMVVMフレームワークの例がたくさんあります。 DroidWizard を使用することをお勧めします

DroidWizardは、ビューとビューモデルを独自に結合し、フレームワークはmvvmとは少し異なります。

ModelEngine ViewModel ViewModel ViewModelビューのinstean

0
Prasanna Anbu

FragmentsのDataBindingについては、次の手順を実行できます。デザインとJava classの両方をFragmentでのデータのバインドの例に投稿しました。

<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:bind="http://schemas.Android.com/apk/res-auto">
    <data class=".UserBinding">
        <variable  name="user" type="com.darxstudios.databind.example.User"/>
    </data>
 <RelativeLayout

    xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent"
    Android:layout_height="match_parent" Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment"
    >



        <TextView Android:text='@{user.firstName+"  "+user.lastName}' Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
            Android:id="@+id/textView" />

     <Button
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:text="New Button"
         Android:id="@+id/button"
         Android:layout_below="@+id/textView"
         Android:layout_toEndOf="@+id/textView"
         Android:layout_marginStart="40dp"
         Android:layout_marginTop="160dp" />

 </RelativeLayout>
</layout>


    public class MainActivityFragment extends Fragment {

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final User user = new User();
        user.setFirstName("Michael");
        user.setLastName("Cameron");
        UserBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_main, container, false);
        binding.setUser(user);

        View view = binding.getRoot();

        final Button button = (Button) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                user.setFirstName("@Darx");
                user.setLastName("Val");
            }
        });

        return view;
    }

}

開発者サイトのデータバインディングガイドライン

0
Ramkailash

私はこれを見つけました Writing Testable Android MVVM Android Data Binding library is nice nice。簡単な例からrecyclerviewまで説明し、テストもあります。

mv2m library も試すことができます。

0
ninjahoahong