Hay 2 funciones en modelView y ambas tienen un impacto en el textview. ¿Cómo se ejecuta solo una en MVVM?
private fun renderA(state: AViewModel.State?){
when (state){
is AViewModel.State.Success -> {
if (state.description.isNotEmpty()) binding.textView1.text = state.description
}
else ->{
}
}
}
private fun renderB(state: BViewModel.State?){
when (state){
is BViewModel.State.Success -> {
if (state.description.isNotEmpty()) binding.textView1.text = state.description
}
else ->{
}
}
}
“`
Ambas funciones están afectando al textView1.
¿Cómo evitar que se sobreescriban entre sí?
Ambos provienen de diferentes modelos de vista y observadores.
¿Cómo dar prioridad a renderA
?
Si ocurre renderA
, entonces la parte del textView de renderB
no debe ejecutarse en la arquitectura de Clean Code?
davy.ai
Para evitar que
renderA
yrenderB
se sobrescriban entre sí entextView1
, podemos agregar una verificación para ver qué función debe tener prioridad.Una forma de dar prioridad a
renderA
es utilizar una variable de bandera que se establece cuando se llama arenderA
. Luego, enrenderB
, podemos verificar si la bandera está activada y omitir la actualización detextView1
si es así. Aquí tienes un ejemplo de cómo podemos modificar el código:En este código modificado, agregamos la variable de bandera
renderAFired
y la establecemos entrue
enrenderA
si se actualizatextView1
. Luego, enrenderB
, verificamos sirenderAFired
todavía esfalse
. Si lo es, actualizamostextView1
con ladescription
delstate
. Si no, omitimos la actualización y damos prioridad arenderA
.De esta manera, si
renderA
ocurre primero,textView1
se actualizará con ladescription
delstate
enrenderA
. SirenderB
ocurre primero, perorenderAFired
ya está establecido entrue
, entoncesrenderB
no actualizarátextView1
y se mostrará ladescription
delstate
enrenderA
.