私は現在多くのWPF開発を行っており、いくつかの基本的なAndroidアプリを作成し始めています。WPFアプリを作成するときは、通常Prismを使用してAndroidプラットフォームのMVVM?
私は Android-Binding の開発者です。 @Brentleyが言ったように、それは非常に新しいプロジェクトですが、改善できるように、より多くの話題と経験を得たいと思っています。質問に戻って、Androidバインディングを使用したMVVMの簡単な紹介/チュートリアルを書きました。
潜在的な採用者は、 プロジェクトディスカッショングループにも登録してください。
私は時々ViewModelsを使用して純粋なモデルからモデルを表示するものに変換しますが、MVVM主義の多くは、この大規模なデータバインディングエンジンがWPFフレームワークに組み込まれているという事実に由来しています。おそらく、WPF + MVVMの正確なエクスペリエンスはAndroidの世界では見つかりませんが、多くの優れたコンセプトを取り入れて(自動データバインディングなどなしで)実装できます。
1つは、ViewModelを作成するだけです。 ViewModelを作成するためにPrismのようなフレームワークは必要ありません。 PropertyChangedの通知やそのようなものをすべて持っているわけではありませんが、データを、コードをクリーンアップするUIでより適切に使用できる情報に変換できます。これの完璧な例は、スライダーが重いUIで行ったことです。 AndroidのSeekBarは常にゼロベースであり、整数値で動作するため、モデルの最小値、最大値、増分値にバインドすることはできません。 ViewModelを使用して、最小値/最大値を、SeekBarが使用できる0から始まる同等の値に変換できます...単なる例です。同じことが、値の範囲などに基づいて色やサイズを表示する場合にも当てはまります。私にとっては、それがViewModelのすべてです。
DependencyInjectionに関しては、RoboGuiceをご覧ください。地元のMeetupで作成者によるプレゼンテーションを見た後、私のプロジェクトの1つでこれを使い始めたばかりで、おそらくあなたが探しているものです。
現在、公式のAndroid Data Binding Pluginがまだベータ版ですが、ベータ版のAndroid Studio。
詳細については、以下を参照してください
Android-Data-Binding ライブラリは、データをユーザーインターフェイス要素に接続するためのツールです。レイアウトファイルが作成され、各アイテムにタグが付けられると、1行のコードですべてのデータがユーザーインターフェイス要素にバインドされ、他のタスクの時間を節約できます。
すばらしいです! Articals by @ Florina Muntenesc
Model-View-ViewModelパターン
MVVMパターンの主なプレーヤーは次のとおりです。
MVVMアーキテクチャの例:
https://github.com/erikcaffrey/People-MVVM
https://github.com/googlesamples/Android-architecture/tree/todo-mvvm-databinding/
https://github.com/iammert/Android-MVVM-Architecture
Android-binding と呼ばれるViewModelsにビューをバインドできるようにする比較的新しいフレームワークが開発されています。このフレームワークと RoboGuice を使用して、MVVMを取得できます。フレームワークにはまだいくつかの作業が必要ですが、それは良い出発点です。
最近、データバインディングライブラリを使用して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 、参照用のサンプルがあります。
あなたを助けることを願っています!
MVVMCross というプロジェクトが1つあります。
Stuart Lodgeが開発した、無料のオープンソースで適切に設計されたMVVMフレームワークです。
彼はAndroidおよびiPhoneのバインディングを実装したため、MVVMはこれらすべてのプラットフォームにも適用可能になりました。
私にとってそれは最高のMVVMフレームワークの1つです。MVVMの力を実際に示しています。これを使用すると、異なるプラットフォーム(WP7、Android、iPhone、WinRT)に1つのコード(モデルおよびビューモデルレイヤー)を記述し、アプリケーションUI(ビューレイヤー)を変更することができます。
興味があるかもしれない他の人々への参照として投稿するだけです。私は RoboBinding -Androidプラットフォーム用のデータバインディングプレゼンテーションモデルフレームワークに貢献しています。同じ目的のための別のフレームワークです。プロジェクト構造の支援とは別に、RoboBindingの主な焦点の1つは、Android単体テストではなく、通常のJUnitテストでAndroidアプリをテストできるようにすることです。プロジェクトの品質は向上しますが、Android単体テストの実行には時間がかかり、単体テストはやや実用的ではありません。 RoboBinding には、品質を保証するために300を超えるJUnitテストが付属しています。 [〜#〜] mvvm [〜#〜] Martin Fowlerによって導入されたプレゼンテーションモデルのデザインパターンの特殊化としてMicrosoftから発信されました。その他の代替手段:Android-Binding、Bindroid、およびMvvmCross。
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.
GithubにはMVVMフレームワークの例がたくさんあります。 DroidWizard を使用することをお勧めします
DroidWizardは、ビューとビューモデルを独自に結合し、フレームワークはmvvmとは少し異なります。
ModelEngine ViewModel ViewModel ViewModelビューのinstean
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;
}
}
私はこれを見つけました Writing Testable Android MVVM Android Data Binding library is nice nice。簡単な例からrecyclerviewまで説明し、テストもあります。
mv2m library も試すことができます。