Un puerto USB en tu app

Cuando comenzamos un proyecto de una app, el 90% de las veces no sabemos cuantos usuarios vamos a tener. Ni siquiera si tendremos un buen puñado de ellos. Esperamos que la app escale y nos haga tremendamente ricos. De ahí a fabricar coches eléctricos y a poner cohetes en el espacio exterior. Pero lo normal es que en sus primeras fases esto no ocurra.

¿Tiene sentido invertir en esta fase en el desarrollo de un backend hecho a medida para tu app? Probablemente no. Si tu app es como el 95% de las apps, utilizar un MBaaS como Firebase o Supabase será más que suficiente. Habrá excepciones, lo sé.

Vale, José, pero… ¿Qué ocurre si más adelante necesito añadir nuevas funcionalidades o tomar el control total sobre mi backend? ¿Tengo que volver a programar mi app?

(…)

No. O muy poquito.

La clave está en plantear una arquitectura de la app que aísle la capa de datos detrás de una abstracción. Técnicamente esto se consigue mediante la abstracción de los repositorios, dejando que tu aplicación sólo tenga dependencias de las fuentes concretas de datos en las implementaciones concretas de esos repositorios.

Súper fácil de entender, ¿no?

Ya, ya sé que no.

Vale.

Y si te digo que es como hacer que tu app tenga un puerto USB-C para que la puedas cargar con cualquier cargador que se pueda conectar a ese puerto USB-C, ¿qué tal?

La app no sabe de donde le vienen los datos y, sinceramente, le da igual mientras le lleguen en la forma en que los espera, que es la forma en que la clase abstracta o protocolo dice que tienen que llegar (el puerto USB-C).

Cuando necesitamos una nueva fuente de datos, ‘desenchufamos’ nuestro MBaaS (Firebase, por ejemplo) y enchufamos nuestro nuevo backend. Lo único que tenemos que hacer es desarrollar la implementación concreta de esa nueva fuente de datos e inyectarla.

El resumen de todo esto es que una buena arquitectura en una app, una que aísle los detalles de implementación de las fuentes de datos y los esconda detrás de abstracciones, es una arquitectura que nos va a permitir no comprometernos en exceso con determinadas soluciones tecnológicas y nos va a dar la flexibilidad para escoger las que mejor se adapten al momento en que se encuentre nuestro proyecto.

Podremos avanzar más rápido y con menores costes. Incluso podremos probar diferentes soluciones en paralelo sin afectar al desarrollo de nuestra app.

Si te gusta, comparte:

Deja un comentario

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

Scroll al inicio