Generalidades

Notas sobre el uso de las clases de otros módulos como argumentos de función componible en Jetpack Compose | Por takahirom | Marzo de 2022

Notas sobre el uso de las clases de otros modulos

Compose omite funciones componibles de una manera agradable cuando el mismo objeto se pasa como argumento.
Sin embargo, esto es condicional.

Si tiene un módulo de aplicación y un módulo de modelo y pasa
El módulo de la aplicación aplica Compose y tiene funcionalidad Composable.
Supongamos que el módulo del modelo tiene una clase de artículo simple.

De estos, solo Composable2 omite el mismo objeto cuando se pasa correctamente. 😵

app module ------------> model module
fun Composable1() class Articles
fun Composable2() class Article
fun Composable3()

módulo de aplicación

módulo modelo

Esto se puede verificar usando Escribir métricas del compiladorSi es reiniciable y no saltable, no se saltará aunque los parámetros sean los mismos.

app_release-componibles.txt

restartable fun Composable1(
unstable articles: Articles
)
restartable skippable fun Composable2(
stable uiModel: UiModel
)
restartable fun Composable3(
unstable article: Article
)

Tres soluciones son posibles.

Solución 1: Envuelva en una clase @Stable.

El primero es envolverlo en una clase UiModel como la función Composable2. Esto funciona bien al notificar a Compose que el objeto no se modificará. En este caso, siempre debe tener cuidado de incluir una clase estable durante el desarrollo.

Solución 2: ejecute el compilador Compose incluso en módulos con modelos.

La forma de hacerlo es ejecutar también el compilador Compose en el módulo modelo donde se encuentran estos artículos, etc.
Esto permite que Compose entienda el artículo y otras clases, por lo que funciona bien.
Sin embargo, esto también requiere una dependencia del tiempo de ejecución de Compose, por lo que si piensa en Jetpack Compose como un marco de interfaz de usuario, puede ser un poco confuso en términos de separación de la interfaz de usuario. (Si ve el mecanismo Componible como un mecanismo para administrar si este cambio es posible, podría considerarse aceptable incluirlo).

Sin embargo, incluso en este caso, Fun Composable1(articles: Articles) no evita que Recompose. Esto se debe a que List puede ser una instancia de MutableList(ArrayList) y no estable. Sin embargo, este es el mismo problema sin importar qué solución se use.

unstable class Articles {
unstable val articles: List

= Unstable
}

Solución 3: Convertir a modelo de interfaz de usuario.

Por supuesto, hacer esto y usar una clase en la interfaz de usuario resolvería el problema. Esto permite la separación de preocupaciones.
Pero, por supuesto, esto no es solo un beneficio, sino también un costo, ya que significa implementar, probar, revisar y mantener mapeos en cada desarrollo.

(Esto también se menciona en la Guía de arquitectura de aplicaciones. https://developer.android.com/jetpack/guide/data-layer?hl=en#modelos-de-negocio )

Cada una de estas soluciones tiene sus pros y sus contras, por lo que creo que es una buena idea adoptar el enfoque que cree que puede tomar de esta lista.

Morisan lo notó en el producto y me dijo el problema, lo investigué
Historia original (aquella por la que pregunté)

código fuente para este ejemplo

LEER  Revisión del Samsung Galaxy S21: consígalo a un precio más bajo.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba