MVVMCross facilita la separación de las preocupaciones en las aplicaciones multiplataforma mediante la implementación del patrón Model-View-ViewModel (MVVM), que promueve inherentemente una división clara de responsabilidades entre los diferentes componentes de una aplicación. Así es como mvvmcross logra esto:
Implementación de patrones MVVM
MVVMCross se construye alrededor de la arquitectura MVVM, que consta de tres componentes principales:
- Modelo: representa los datos y la lógica comercial de la aplicación. Encapsula las estructuras y operaciones de datos que son independientes de la interfaz de usuario.
- Ver: maneja la interfaz de usuario y las interacciones de usuario. Es responsable de mostrar datos y recibir información del usuario.
- ViewModel: actúa como intermediario entre el modelo y la vista. Expone datos y comandos a los que la vista puede unirse, desacoplando efectivamente la vista desde el modelo.
Al mantener esta separación, MVVMCross se asegura de que cada componente se centre en su papel específico sin las responsabilidades superpuestas. Por ejemplo, la vista no debe contener la lógica de negocios, y el Modelo ViewModel no debe manipular directamente los elementos de la interfaz de usuario.
Biblioteca de clases portátiles (PCL) para la lógica compartida
MVVMCross utiliza una biblioteca de clase portátil (PCL) para albergar los modelos de vista, modelos e interfaces para servicios específicos de la plataforma. Este PCL sirve como proyecto central, que contiene la lógica de negocios compartida y el manejo de la base de datos. Al separar la lógica comercial en un PCL, MVVMCross permite a los desarrolladores compartir una parte significativa del código en diferentes plataformas, como iOS, Android y Windows. Este enfoque no solo facilita la reutilización del código, sino que también garantiza que la lógica comercial siga siendo consistente en todas las plataformas.
enlace de datos y comunicación
MVVMCross emplea datos de enlace de datos a las vistas de enlace con sus modelos de vista correspondientes. Este mecanismo permite que la vista se actualice automáticamente cuando cambia ViewModel y viceversa. La unión de datos es crucial para mantener la separación de las preocupaciones porque permite que la visión reaccione a los cambios en el Modelo ViewModel sin necesidad de conocer los detalles de implementación de la lógica comercial.
Además, MVVMCross admite diversas técnicas de comunicación, como comandos y eventos, que mejoran aún más la separación de preocupaciones al permitir que la vista invoque acciones en el modelado ViewModel sin acceder directamente a su estado interno.
La inyección de dependencia y la arquitectura del complemento
MVVMCross incorpora la inyección de dependencia (DI) y una arquitectura de complemento para administrar las dependencias y extender las capacidades del marco. La inyección de dependencia ayuda a garantizar que los componentes estén libremente acoplados, lo que facilita la prueba y mantiene la aplicación. La arquitectura del complemento permite a los desarrolladores agregar nuevas funcionalidades sin alterar el marco central, manteniendo así una separación limpia de las preocupaciones.
Gestión del ciclo de vida
MVVMCross proporciona características de gestión del ciclo de vida para ViewModels, que están vinculados al ciclo de vida de las vistas. Esto significa que ViewModels puede notificarse cuando se crea la vista, aparece, desaparece o se destruye. Dicha gestión del ciclo de vida ayuda a mantener una separación limpia de las preocupaciones asegurando que los recursos se limpien adecuadamente y que el estado de ViewModel se administre correctamente.
En resumen, MVVMCross facilita la separación de preocupaciones en las aplicaciones multiplataforma al hacer cumplir el patrón MVVM, utilizando un PCL para la lógica compartida, implementando la unión de datos e incorporando la inyección de dependencia y el manejo del ciclo de vida. Estas características contribuyen colectivamente a una arquitectura de aplicación robusta, mantenible y escalable.
Citas:[1] https://www.linkedin.com/advice/0/whatest-way-essure-separation-concerns-mvvvm-design-csadc
[2] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcrossframework/
[3] https://visualstudiomagazine.com/articles/2018/05/08/build-a-xamarin.forms-application.aspx
[4] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[5] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[6] https://www.mvvmcross.com/documentation/getting-started/getting-started
[7] https://www.mvvmcross.com/documentation/fundamentals/data-sninging
[8] https://stackoverflow.com/questions/32220007/whatdoes-mvvmcross-do-that-xamarin-doesnt-already
[9] https://github.com/mvvmcross/mvvmcross