Entonces, por ejemplo, el problema con esto es que cuando haces clic en conectar, no se conectará, porque sigue intentando, y no hay sincronización entre la UI y el sistema. Así que, sin una única fuente de verdad, la UI puede mentir sin fallar. Entonces, aquí, el problema es que no estamos notificando al usuario que algo está saliendo mal, porque digamos que algo está yendo mal, estrellaremos la aplicación para que pueda recuperarse de la memoria o ayudarte a poner tu teléfono o sistema en un mal estado. Aquí, no estamos fallando ni notificando al usuario. Así que, en realidad, es una mala experiencia de usuario, porque el usuario sigue intentando, por qué no se conecta, por qué no se conecta, y bajo el capó, solo está reintentando, y no hay indicación o UI intuitiva que informe al usuario, está bien, estamos intentando o algo.
¿Por qué los reintentos solos fallan? Entonces, retry, quiero decir como si algo estuviera mal, intentas arreglarlo invisiblemente en el backend o en el fondo, diría yo. Entonces, reintentos desde, entonces, primero son reintentos desde, como una desconexión desencadena muchos reconectar. Entonces, por ejemplo, te conectas a un dispositivo y se desconecta. Entonces, digamos que pones como un try catch en esa conexión y falló, vuelves a llamar a conectar. Entonces, es como una llamada recurrente para conectar, desconectar, desconectar, conectar. Así que nadie coordina cómo funcionan las cosas. El problema es que te conectas, la UI dice conectar, pero está fallando, nuevamente conectando, fallando, conectando. Así que, si estás usando estados únicos como un nuevo estado, y solo dependiendo del Boolean, entonces, estará parpadeando un poco, desconectar, conectar, desconectar, conectar. Creo que como quien esté trabajando en un dispositivo Bluetooth podría haber enfrentado este problema, como lo difícil que es gestionar el estado entre las diferentes fases de conexión.
El segundo es trabajo duplicado. Como cuando reintentas o tocas un botón o como estilo de vida, como un programa en segundo plano, llamas al método de conectar solo para arreglar ese problema o problema de reintento. Entonces, el problema es que hay tres sitios de llamada diferentes para el conectar y es difícil rastrearlo a menos que pongas registros explícitos o logging allí, pero creo que es un mal patrón llamar a un método de conectar tres veces solo para arreglar el mismo problema de reintento. Veremos cómo podemos arreglarlo con la máquina de estados. Máquina de estados reintentos obsoletos. Entonces, por ejemplo, estás desconectado y presionas conectar. Digamos que presionas conectar tal vez múltiples veces. Tal vez el usuario está probando o tal vez hay un error, como un error lógico que desencadena como múltiples conexiones. Entonces, aquí lo que sucede es como una primera solicitud está en proceso y aún se coloca otra solicitud. Así que no hay verificación. Está bien, si la primera solicitud está en curso, entonces espera o termina eso y haz la solicitud nueva nuevamente. Así que la solicitud obsoleta sigue como antigua porque todavía está pendiente y acumulará la nueva solicitud. Así que crea un problema porque digamos que la primera solicitud se ejecutó, la segunda se ejecutará. Así que, innecesariamente habrá múltiples callbacks que pueden poner tu UI en un mal estado. Reintentos ciegos. Entonces, por ejemplo, para OTA o configurar una conexión Bluetooth y estás intentando en el momento equivocado.
Comments