it-swarm-ru.tech

Android Примеры шаблонов проектирования MVVM

В настоящее время я много занимаюсь разработкой WPF и начал создавать некоторые базовые Android приложения. При создании приложений WPF я часто использую MVVM, обычно с использованием Prism, и хотел бы знать, есть ли примеры MVVM для платформы Android?

63
Tom Dudfield

Я разработчик Android-Binding . Как сказал @Brentley, это очень новый проект, но я надеюсь получить больше опыта и опыта, чтобы его можно было улучшить. Возвращаясь к вашему вопросу, я написал несколько простых вводных/учебных пособий по MVVM с Android-привязкой:

Потенциальные усыновители, пожалуйста, также зарегистрируйтесь в группа обсуждения проекта.

83
xandy

Иногда я использую ViewModels для перевода из чистой Модели в то, как должна отображаться Модель, но большая часть MVVM-изм обусловлена ​​тем фактом, что у вас есть этот мощный механизм привязки данных, встроенный в платформу WPF. Вероятно, вы не найдете точного опыта работы с WPF + MVVM в мире Android, но вы можете воспользоваться множеством хороших концепций и реализовать их (без использования средств автоматической привязки данных).

Например, просто создайте ViewModels. Вам не нужен каркас, такой как Prism, для создания ViewModels. У вас нет всех уведомлений PropertyChanged и тому подобного, но вы можете преобразовать свои данные в информацию, которая может быть лучше использована вашим пользовательским интерфейсом, чтобы очистить ваш код. Прекрасным примером этого является то, что я сделал с пользовательским интерфейсом. Android SeekBar всегда основан на нуле и работает с целочисленными значениями, поэтому вы не можете привязать минимальные, максимальные значения и значения приращения из вашей модели. Вы можете использовать ViewModel, чтобы перевести ваши минимальные/максимальные значения в эквиваленты, основанные на 0, которые ваш SeekBar может использовать ... просто пример. То же самое касается отображения цветов и размеров на основе диапазонов значений и т.д. Для меня это то, что представляют собой ViewModels.

Что касается вещей DependencyInjection, посмотрите RoboGuice. Я только начал использовать это в одном из своих проектов после того, как увидел презентацию его создателя на местном Meetup, и это, вероятно, именно то, что вы ищете.

RoboGuice в Google Code

RoboGuice Google Group

7
Rich

В настоящее время существует официальный Android плагин привязки данных, хотя он все еще находится в стадии бета-тестирования. Также ведется работа по добавлению поддержки инструментов для синтаксиса привязки в бета-версии Android Studio.

Смотрите ниже для получения дополнительной информации

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

4
Ody

Android-Data-Binding библиотека - это инструмент для подключения данных к элементам пользовательского интерфейса. Как только файл макета создан и каждый элемент помечен, одна строка кода связывает все данные с элементами пользовательского интерфейса и экономит ваше время для других задач.

3
furkan3ayraktar

Большой! Художественные произведения @ Florina Muntenesc

Модель Model-View-ViewModel

Основными игроками в паттерне MVVM являются:

  • View - информирует ViewModel о действиях пользователя
  • ViewModel - предоставляет потоки данных, относящихся к представлению
  • 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

Разрабатывается сравнительно новая структура, которая позволяет привязывать Views к ViewModels, называемую Android-binding . Используя эту платформу и RoboGuice вы можете включить MVVM. Фреймворк все еще нуждается в доработке, но это хорошая отправная точка.

3
Brentley Jones

Недавно я реализовал шаблон MVVM для создания приложения Android с библиотекой привязки данных. Здесь вы можете прочитать подробный обзор проделанной мной работы и фрагментов кода: http://cases.azoft.com/mvvm-Android-data-binding/

Чтобы узнать больше о теме, вы также можете взглянуть на следующие примеры приложений: https://github.com/ivacf/archi

Есть наглядные примеры работы, выполненной с помощью экрана поиска и списка.

2
Vladimir Tchernitski

Несколько лет назад я также занимался разработкой WPF и WP Light Prism & MVVM Light Toolkit обычно используется для создания WP приложения, я думаю, он идеально подходит для архитектуры приложений Windows Phone! поэтому я использую свой предыдущий опыт разработки WP, а затем имитирую создание Android MVVM Light Toolkit (инструментарий, помогающий создать Android Приложение MVVM , У нас есть больше атрибутов для привязки данных View (например, Uri для ImageView), мы создаем некоторую команду для обработки события (например, нажатие кнопки), также есть глобальный канал сообщений для связи с другой ViewModel) ,.

GitHub: Android MVVM Light Toolkit , есть примеры для справки.

Архитектура : http://upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/ полоса% 7CimageView2/2/вес/124

надеюсь помочь вам!

2
KelinHong

Существует один проект под названием MVVMCross .

Это бесплатный, с открытым исходным кодом и хорошо разработанный MVVM-фреймворк, разработанный Stuart Lodge.

Он реализовал привязку для Android и ​​iPhone, поэтому теперь MVVM применима и ко всем этим платформам.

Для меня это одна из лучших платформ MVVM - она ​​действительно демонстрирует мощь MVVM. С его помощью вы можете написать один код (слои модели и модели представления) для разных платформ (WP7, Android, iPhone, WinRT) и просто изменить пользовательский интерфейс приложения (уровень представления).

1
gerichhome

Просто для публикации в качестве ссылки на других людей, которые могут быть заинтересованы. Я участвую в RoboBinding - инфраструктуре представления данных с привязкой данных для платформы Android. Это еще одна основа для той же цели. Помимо оказания помощи в структуре проекта, одной из основных задач RoboBinding является обеспечение возможности тестирования Android приложений с помощью обычных тестов JUnit вместо Android, поскольку модульные тесты так важны, чтобы гарантировать качество проектов, но Android модульные тесты требуют много времени для запуска и делают его нецелесообразным. RoboBinding само по себе поставляется с более чем 300 тестами JUnit для обеспечения его качества. MVVM возникла из Microsoft как специализация шаблона проектирования Presentation Model, представленного Мартином Фаулером. Другие альтернативы: Android-Binding, Bindroid и MvvmCross.

1
Cheng

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

Архитектура Android MVVM: пример приложения

Этот репозиторий содержит подробный пример приложения, которое реализует архитектуру MVVM с использованием Dagger2, Room, RxJava, FastAndroidNetworking, PlaceHolderView и AndroidDebugDatabase

Приложение имеет следующие пакеты:

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

Есть много примеров для MVVM фреймворка в github. Я рекомендую использовать DroidWizard

DroidWizard имеет свою собственную связь между представлением и моделью представления, и фреймворк немного отличается от mvvm.

ModelEngine ViewModel View - представление модели ViewModel View

0
Prasanna Anbu

Вы можете выполнить следующие шаги для привязки данных во фрагментах: я разместил дизайн и класс Java в Примере привязки данных во фрагменте.

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

}

Руководство разработчика сайта DataBinding Guide Line

0
Ramkailash

Я нашел это Writting Testable Android MVVM Серия приложений, написанная о MVVM с использованием Android Библиотека привязки данных действительно хороша. В этой серии он объяснил от простого примера до рециркуляции, а также есть тесты.

Вы также можете попробовать библиотека mv2m .

0
ninjahoahong