Estrategia de solución - Pharsat/Granny GitHub Wiki

La aplicación Granny nace como una propuesta académica para desarrollar las diferentes habilidades adquiridas en la clase de Arquitectura de sistemas, esta propuesta tiene las diferentes restricciones mencionadas en las restricciones organizacionales, la aplicación debe ser una app móvil ya que esta enfocada a un público abierto, la aplicación se podrá usar sin una necesidad de registro, una vez el usuario desee ingresar la información de un producto entonces deberá de autentificarse a travez del API de Google.

La aplicación debe ser contenerizable, además de que debe implementar una arquitectura de microservicios ya que son los temas que se deben aprender en el curso.

Para la implementación de la arquitectura de microservicios se ha decidido dividir el Backend en 3 dominios, Seguridad, Registro y Consulta, siendo que Registro y Consulta compartirán una base de datos única pero podrán ser escalables de manera independiente. Seguridad por su parte se conectara a una base de datos no relacional.

Se uso el teorema CAP para la selección apropiada de los servicios de persistencia de datos, tras el análisis hecho sobre que base de datos deberíamos usar para cada API se determina que usar una base de datos relacional para el almacenamiento de la información de productos y una base de datos no relacionado para almacenar la información de usuarios asegura cumplir con los atributos de calidad descritos al principio del documento.

La comunicación entre los API será a travez de llamadas https con cuerpo en formato JSON. Entre las API la validación de las peticiones se hará con CORS de .NetCore (dominios conocidos por cada instancia que garantizaran que las comunicaciones no provengan de fuentes externas).

La autenticación para el registro de datos en la plataforma será proveída por Google, los datos tras la autenticación serán almacenados en la plataforma de seguridad.

La autenticación de la aplicación móvil con las API se hará mediante una llave de seguridad (AuthToken) cuya llave privada solo será conocida por la App Móvil.

Dado que la aplicación requiere interoperabilidad con los diferentes servicios externos, se debe garantizar el uso de interfaces de comunicación que no hagan dependientes las implementaciones estrictas de cada componente.

Ionic esta basado en React que es una librería para construir SPAs (Single Page Applications), dado esto se usara una arquitectura interna en la app móvil que garantice la flexibilidad y reusabilidad de los componentes. El desarrollo de la app móvil con Ionic esta justificado para garantizar el atributo de portabilidad en el cual se desea que la app móvil esté disponible desde diferentes sistemas operativos, los mas usados del mercado.

La aplicación estará basada en tiempo de soicitud, los precios e información de los productos no serán almacenados en fuentes locales de tal manera que siempre será necesario los request al servidor para obtener información. Esto excluye también el catching de solicitudes a los API (queda por fuera del scope).

El contenido grafico de la solución no se desea altamente elaborado pero si debe manifestar sencillez y usabilidad de tal forma que el usuario no desista del uso de la misma por razones de experiencia de usuario.