Przykłady wzorców projektowych Android MVVM

Obecnie zajmuję się rozwojem WPF i zacząłem tworzyć podstawowe aplikacje na Androida. Tworząc aplikacje WPF często korzystam z MVVM, zwykle używam Prism i chciałbym się dowiedzieć, czy są jakieś przykłady MVVM dla Platformy Android?

Author: Tom Dudfield, 2011-02-11

14 answers

Jestem twórcą Android-Binding. Jak powiedział @Brentley, jest to bardzo nowy projekt, ale mam nadzieję, że zdobędę więcej szumu i doświadczenia, aby można było go ulepszyć. Wracając do twojego pytania, napisałem kilka prostych wstępów / samouczków na MVVM z Androidem-binding:

Potencjalni użytkownicy prosimy również o rejestrację na grupie dyskusyjnej projektu.

 80
Author: xandy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-16 13:40:27

Czasami używam ViewModels do tłumaczenia z czystego modelu na to, co Model powinien być wyświetlany, ale tak wiele z MVVM-isms pochodzi z faktu, że masz ten ogromny silnik wiązania danych wbudowany w Framework WPF. Prawdopodobnie nie znajdziesz dokładnego doświadczenia WPF + MVVM w świecie Androida, ale możesz wziąć wiele dobrych koncepcji i wdrożyć je (tylko bez automatycznego wiązania danych).

Po prostu stwórz model widoku. Nie potrzebujesz RAM jak pryzmat do tworzenia Viewmodeli. Nie masz wszystkich właściwych powiadomień i podobnych rzeczy, ale możesz przetłumaczyć swoje dane na informacje, które mogą być lepiej wykorzystane przez twój UI, który wyczyści Twój kod. Doskonałym tego przykładem jest coś, co zrobiłem z ciężkim suwakiem interfejsu użytkownika. Pasek SeekBar systemu Android jest zawsze oparty na zerze i działa z wartościami całkowitymi, więc nie można powiązać z wartościami min, max i increment z modelu. Możesz użyć modelu widoku, aby przetłumaczyć wartości min / max NA Odpowiedniki oparte na 0, których może używać twój SeekBar...to tylko przykład. To samo dotyczy wyświetlania kolorów i rozmiarów na podstawie zakresów wartości, itp. Dla mnie na tym polega ViewModels.

Jeśli chodzi o DependencyInjection, sprawdź RoboGuice. Właśnie zacząłem używać tego w jednym z moich projektów po obejrzeniu prezentacji jego twórcy na lokalnym Meetupie i prawdopodobnie jest to to, czego szukasz.

RoboGuice on Google Code

RoboGuice Google Grupa

 7
Author: Rich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-11 20:27:52

Istnieje teraz oficjalny Android Data Binding Plugin, chociaż nadal w wersji beta w tej chwili. Trwają również prace nad dodaniem obsługi narzędzi dla składni wiązania w wersji beta Android Studio.

Zobacz poniżej, aby uzyskać więcej informacji

Https://developer.android.com/tools/data-binding/guide.html

 4
Author: Ody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 11:00:42

Rozwijany jest stosunkowo nowy framework, który pozwala na łączenie widoków z Viewmodelami o nazwie android-binding . Korzystając z tego frameworka i RoboGuice możesz włączyć swój MVVM. Ramy nadal wymagają trochę pracy, ale to dobry punkt wyjścia.

 3
Author: Brentley Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-15 20:19:04

Biblioteka Android-Data-Binding jest narzędziem do łączenia danych z elementami interfejsu użytkownika. Po utworzeniu pliku układu i oznakowaniu każdego elementu jedna linia kodu wiąże wszystkie dane z elementami interfejsu użytkownika i oszczędza czas na inne zadania.

 3
Author: furkan3ayraktar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 21:43:53

Ostatnio zaimplementowałem wzorzec MVVM do budowania aplikacji na Androida z biblioteką wiązania danych. Tutaj możesz przeczytać szczegółowy przegląd wykonanej przeze mnie pracy oraz fragmenty kodu: http://cases.azoft.com/mvvm-android-data-binding/

Aby dowiedzieć się więcej na ten temat, Możesz również spojrzeć na te próbki aplikacji: https://github.com/ivacf/archi

Istnieją wizualne przykłady pracy wykonanej za pomocą ekranu wyszukiwania i listy.

 2
Author: Vladimir Tchernitski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-15 14:36:40

Kilka lat temu robię również WPF i WP development, Prism & MVVM Light Toolkit jest powszechnie używany do budowania aplikacji WP, jest idealny dla architektury aplikacji windows phone myślę ! więc używam mojego poprzedniego doświadczenia WP rozwoju następnie naśladować, aby utworzyć Android MVVM Light Toolkit(Zestaw Narzędzi pomoc do budowania aplikacji Android MVVM ,mamy więcej atrybutów do wiązania danych widoku(jak Uri dla ImageView), tworzymy jakieś polecenie do czynienia z wydarzeniem( jak kliknięcie przycisku), również mieć global message pipe do komunikacji z innym ViewModel).

GitHub:Android MVVM Light Toolkit , istnieją próbki w celach informacyjnych.

Architektura: http://upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

Mam nadzieję Ci pomóc!

 2
Author: KelinHong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 03:12:03

Świetnie! Articals by @ Florina Muntenescu

Wzorzec Model-View-ViewModel

Głównymi graczami we wzorze MVVM są:

  • widok-który informuje ViewModel o działaniach użytkownika
  • ViewModel-wyświetla strumienie danych istotnych dla widoku
  • DataModel-abstrakcja źródła danych. ViewModel współpracuje z DataModel do pobierania i zapisywania danych.

Przykład MVVM Architektura:

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

 2
Author: Dhaval Jivani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-03 12:53:51

Istnieje jeden projekt o nazwie MVVMCross .

To darmowy, open-source i dobrze zaprojektowany framework MVVM, opracowany przez Stuarta Lodge.

Zaimplementował Wiązanie dla Androida i iPhone ' a, więc teraz MVVM ma zastosowanie również do wszystkich tych platform.

Dla mnie jest to jeden z najlepszych frameworków MVVM-naprawdę pokazuje moc MVVM. Dzięki niemu możesz napisać jeden kod (warstwy modelu i viewmodel) dla różnych platform (WP7, Android, iPhone, WinRT) i po prostu zmienić interfejs aplikacji (warstwa widoku).

 1
Author: gerichhome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-28 11:04:40

Wystarczy zamieścić jako odniesienie do innych osób, które mogą być zainteresowane. Jestem współautorem RoboBinding - ramowego modelu prezentacji wiążącej dane dla Platformy Android. To kolejne ramy dla tego samego celu. Oprócz pomocy w strukturze projektu, jednym z głównych celów Robobindingu jest umożliwienie testowania aplikacji na Androida z normalnymi testami JUnit zamiast testów jednostkowych Androida, ponieważ testy jednostkowe są tak ważne, aby zagwarantować jakość projektów, ale testy jednostkowe Androida potrzeba czasu, aby uruchomić i zrobić testy jednostkowe nieco niepraktyczne. Sam RoboBinding zawiera ponad 300 testów JUnit, aby zapewnić jego jakość. MVVM wywodzi się od Microsoftu jako specjalizacja wzorca projektowego modelu prezentacji wprowadzonego przez Martina Fowlera. Inne alternatywy: Android-Binding, Bindroid i MvvmCross.

 1
Author: Cheng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 01:52:03

Możesz wykonać następujące kroki dla Databindingu we fragmentach: umieściłem design i klasę java zarówno w przykładzie do wiązania danych we fragmencie.

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

}

Strona dewelopera DataBinding Guide Line

 0
Author: Ramkailash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 09:52:47

Znalazłem to pisanie Testowalnej serii aplikacji na Androida MVVM pisane o MVVM za pomocą biblioteki wiązania danych Androida jest naprawdę miłe. W serii wyjaśnił od prostego przykładu do recyclerview, są też testy.

Możesz też wypróbować bibliotekę mv2m.

 0
Author: ninjahoahong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 14:31:06

Istnieje wiele przykładów frameworku MVVM w GitHubie. Polecam użycie DroidWizard

DroidWizard wykonuje własne sprzężenie między widokiem a modelem widoku, a framework nieco różni się od mvvm.

ModelEngine ViewModel View instean modelu ViewModel View

 0
Author: Prasanna Anbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 06:07:02

Https://github.com/MindorksOpenSource/android-mvvm-architecture

Architektura MVVM Androida: Przykładowa aplikacja

To repozytorium zawiera szczegółową przykładową aplikację, która implementuje architekturę MVVM przy użyciu Dagger2, Room, RxJava, FastAndroidNetworking, PlaceHolderView i AndroidDebugDatabase

Aplikacja posiada następujące pakiety:

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
Author: mohit issar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-25 08:29:24