mvc modelo ejemplo data arquitectura java android design-patterns mvvm dependency-injection

java - modelo - Ejemplos de patrones de diseño de Android MVVM



mvvm vs mvc (13)

¡Estupendo! Articals por @Florina Muntenescu

El patrón Model-View-ViewModel

Los principales jugadores en el patrón MVVM son:

  • The View: informa al ViewModel sobre las acciones del usuario
  • ViewModel: expone secuencias de datos relevantes para la Vista
  • The DataModel: abstrae la fuente de datos. ViewModel funciona con DataModel para obtener y guardar los datos.

Ejemplo de arquitectura 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

Actualmente realizo mucho desarrollo de WPF y he comenzado a crear algunas aplicaciones básicas de Android. Al crear aplicaciones WPF, suelo usar MVVM, que normalmente usa Prism, y me gustaría saber si hay algún ejemplo de MVVM para la plataforma Android.


A veces uso ViewModels para traducir de un Modelo puro a lo que debería mostrarse el Modelo, pero gran parte de los MVVM-isms provienen del hecho de que tiene este motor masivo de enlace de datos integrado en el marco WPF. Probablemente no encuentre la experiencia exacta de WPF + MVVM en el mundo de Android, pero puede tomar muchos de los buenos conceptos e implementarlos (solo sin el enlace automático de datos).

Para empezar, solo crea ViewModels. No necesita un marco como Prism para crear ViewModels. No tiene todas las notificaciones PropertyChanged y cosas por el estilo, pero puede traducir sus datos en información que pueda ser mejor utilizada por su UI que limpiará su código. Un ejemplo perfecto de esto es algo que hice con una interfaz de usuario con control deslizante. La barra SeekBar de Android siempre se basa en cero y funciona con valores enteros, por lo que no puede vincularse a valores mínimos, máximos e incrementales de su modelo. Puede usar un ViewModel para traducir sus valores mínimos / máximos en equivalentes basados ​​en 0 que su SeekBar puede usar ... solo un ejemplo. Lo mismo ocurre con la visualización de colores y tamaños basados ​​en rangos de valores, etc. Para mí, eso es de lo que se trata ViewModels.

En cuanto a cosas de DependencyInjection, echa un vistazo a RoboGuice. Acabo de empezar a usar esto en uno de mis proyectos después de ver una presentación de su creador en un Meetup local, y es probablemente justo lo que estás buscando.

RoboGuice en Google Code

RoboGuice Google Group


Ahora hay un complemento oficial de enlace de datos de Android, aunque todavía está en fase beta. También se está trabajando para agregar soporte de herramientas para la sintaxis de enlace en la versión beta de Android Studio.

Vea abajo para más información

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



Hace algunos años también desarrollé WPF & WP, el Prism & MVVM Light Toolkit se utiliza comúnmente para compilar la aplicación WP. ¡Es perfecto para la arquitectura de aplicaciones de Windows! entonces uso mi experiencia previa de desarrollo de WP y luego imito crear Android MVVM Light Toolkit (Un toolkit ayuda a construir Android MVVM Application, tenemos más atributos para Data Binding of View (como Uri for ImageView), creamos algunos comandos para tratar con evento (como hacer clic en el botón), también tienen un canal de mensaje global para comunicarse con otro modelo de vista).

GitHub: Android MVVM Light Toolkit , hay ejemplos para referencia.

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

espero ayudarte!


Hay muchos ejemplos de framework MVVM en github. Recomiendo usar DroidWizard

DroidWizard hace su propio acoplamiento entre view y view model y el framework es ligeramente diferente de mvvm.

ModelEngine ViewModel View instean de Model ViewModel View


Hay un proyecto llamado MVVMCross .

Es un framework MVVM gratuito, de código abierto y bien diseñado, desarrollado por Stuart Lodge.

Implementó el enlace para Android y iPhone, por lo que ahora MVVM también se aplica a todas estas plataformas.

Para mí es uno de los mejores marcos de MVVM, realmente muestra el poder de MVVM. Con él puedes escribir un código (modelo y capas de viewmodel) para diferentes plataformas (WP7, Android, iPhone, WinRT) y simplemente cambiar la interfaz de usuario de la aplicación (ver capa).


Puede seguir estos pasos para DataBinding en Fragments: he publicado el diseño y la clase java en el Ejemplo para enlazar datos en 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; } }

Sitio del programador DataBinding Guide Line


Recientemente, he implementado el patrón MVVM para construir una aplicación de Android con Data Binding Library. Aquí puede leer la revisión detallada del trabajo que he realizado y los fragmentos del código: http://cases.azoft.com/mvvm-android-data-binding/

Para obtener más información sobre el tema, también puede echar un vistazo a estos ejemplos de aplicaciones: https://github.com/ivacf/archi

Hay ejemplos visuales del trabajo realizado con la pantalla de búsqueda y lista.


Se está desarrollando un marco relativamente nuevo que permite que las Vistas se vinculen a ViewModels denominadas android-binding . Usando este marco y RoboGuice , puede activar su MVVM. El marco todavía necesita algo de trabajo, pero es un buen punto de partida.


Solo para publicar como referencia a otras personas que puedan estar interesadas. Soy colaborador de RoboBinding : un marco de modelo de presentación vinculante para la plataforma Android. Es otro marco para el mismo propósito. Además de ayudar con la estructura del proyecto, un enfoque principal para RoboBinding es hacer pruebas de aplicaciones de Android con pruebas normales de JUnit en lugar de pruebas unitarias de Android, ya que las pruebas unitarias son tan importantes para garantizar la calidad de los proyectos, pero las pruebas de unidad de Android tardan años en ejecutarse y hacer que las pruebas unitarias sean poco prácticas. RoboBinding viene con más de 300 pruebas JUnit para garantizar su calidad. MVVM originó a partir de Microsoft como una especialización del patrón de diseño del modelo de presentación presentado por Martin Fowler. Otras alternativas: Android-Binding, Bindroid y MvvmCross.


Soy el desarrollador de Android-Binding . Al igual que @Brentley, dijo, es un proyecto muy nuevo, pero espero obtener más entusiasmo y experiencia para que se pueda mejorar. Volviendo a su pregunta, he escrito algunas introducciones / tutoriales simples sobre MVVM con enlace de Android:

Los posibles adoptantes también se registran en el grupo de discusión del proyecto.


Android-Data-Binding biblioteca de enlace de datos de Android-Data-Binding es una herramienta para conectar datos a elementos de la interfaz de usuario. Una vez que el archivo de diseño se ha creado y cada elemento está etiquetado, una línea de código vincula todos los datos a los elementos de la interfaz de usuario y ahorra tiempo para otras tareas.