Toda la lógica empresarial está en un modelo de vista. Esta es una clase consciente del ciclo de vida que nos permite almacenar y administrar datos que sobrevivirán a los cambios de configuración, como la rotación de la pantalla.
En la clase MainViewModel tenemos un repositorio. En aplicaciones grandes, a menudo necesitamos una capa intermedia como presentador o caso de uso para separar la lógica y la responsabilidad, pero un repositorio es suficiente para nosotros. Una buena solución es inyectar el repositorio en un modelo de vista con Dolch, Koin u otros marcos de inyección de dependencia.
La siguiente propiedad es una cadena defaultError. No lo hagas en la aplicación real. Una buena idea es incluir una clase de administrador de recursos personalizada que tenga contexto y pueda obtener recursos correctamente en un modelo de vista.
Nuestros propietarios de datos son datos en vivo modificables. Podemos observarlo fácilmente por actividad o fragmentos y mostrar al usuario los datos reales.
Echemos un vistazo a lo principal. Llamar datos Método. Primero, verifico el valor de screenState. Si ya es éxito En nuestro caso, no tenemos que seguir cargando. Realmente es un ejemplo muy simple. De lo contrario, cambiaré el estado de la pantalla cargando el estado para ver el usuario pendiente e intentando obtener datos del repositorio. Casi siempre tenemos que realizar operaciones de bloqueo al solicitar datos del servidor o base de datos. Aquí estoy usando corrutinas y la extensión viewModelScope. En este bloque de código puedo llamar a las funciones de suspensión, la idea principal de las corrutinas. Demora nos ayuda a probar la interfaz de usuario, pero no en una práctica real. Todas las cargas sintéticas y las expectativas son una mala elección. Como desarrolladores, necesitamos mostrar información y datos a nuestros usuarios lo más rápido posible. La mejor solución es guardar los datos de la caché, verlos y descargarlos del servidor al mismo tiempo. El siguiente paso es obvio: cuando obtengamos el resultado, lo mostraremos éxito si no, lo mostraremos Error .
Eche un vistazo al repositorio.
Deberíamos trabajar con interfaces y ocultar su lógica en implementaciones para crear aplicaciones bien mantenidas. MainApi es una clase de objeto anónimo que realiza la interfaz con un solo método. Puede ser una actualización, una base de datos u otras fuentes.
La Obtener datos El método de MainRepositoryImpl devuelve al usuario de forma aleatoria desde la API o lanza una excepción.
Normalmente uso la función de vinculación de vistas para interactuar con las vistas, pero aquí hay una antigua findViewById Solución. Primero, le preguntamos a ViewModelProvider sobre nuestro modelo de vista principal. Si existe obtendremos nuestro modelo con todos los datos almacenados allí, si no, obtendremos uno nuevo. Después de eso, comienzo a observar datos en vivo de la salud de la pantalla. Dado que el tipo de datos de estado de la pantalla en vivo es nuestra clase sellada, podemos usarlo Cuándo Expresión sin otras ramas. Estamos absolutamente seguros de que solo podemos obtener una de estas tres subclases. Aquí oculto o muestro vistas principales como success_layout, progress_bar y error_layout.