Servicio - RaulGF92/UniApi GitHub Wiki
#Introdución
Un servicio es un trabajo realizado sobre unos proyectos del mismo tipo. Cada servicio tendrá una implementación diferente. Pero todos acabaran siendo servicios y necesitando unos servicios minimos. Estos servicios minimos, que seran explicados a continuación, son necesarios y obligatorios su implementación para el funcionamiento de la aplicación.
#Descripción del diseño
##Servicio general:
Todo servicio debera contener diversas funciones. Como saber encontrar el proyecto con el que trabaja, la fecha donde se inicio el servicio, asi como su duración, además debera poder identificarse y diferenciarse de sus iguales.
Dentro de los servicios deberemos identificar dos tipos basicos los Servicios de programación y los servicios especiales. Ambos aunque sean servicios tienen caracteristicas suficientemente separadas como para diferenciarlos. Ambos servicios debén poder ser ejecutados por la capa Enviroment Execution Layer.
##Servicio de programación:
Los servicios de programación son servicios que buscan ser compilados y ejecutados. utilizan las entradas de los proyectos y generan unas salidas. Para su utilización es necesario ordenar a los servicios que realicen estas dos operaciones y proporciones luego sus resultados. Estos servicios están pensados para ser utilizados de manera asincrona, ya que el computo de proyectos consume mucho tiempo. Por eso los servicios contendrán metodos de control.
##Servicios especiales:
Los servicios especiales son servicios que no estan pensados para ser asincronos, es decir, que no nos importa mucho obtener la salida. Sino que realizen su trabajo de manera eficiente. La gestión de ficheros y algún servicio no pensado. Serán servicios especiales.
#Descripción de la implementación del modelo:
##Servicios:
Para la implementación del modelo de la aplicación utilizaremos un diseño orientado a la creación de servicios de distintas familias. Se creara una familia común llamada Servicio que trabajara sobre la clase proyecto (es explicada en su entidad), dos subclases mas Programación y Especial.
Como el objetivo de este diseño es la creación continua de servicios de diferentes tipos, pero con padres con propiedades comunes, nos enfocares en un diseño de tipo factoria. Donde existan unas interfaces comunes para la realización de los servicios y así facilite la creación o modificación de servicios. Tambien se dejara abstracto la busqueda de servicios. Gracias a la factoria (ejemplo posterior) ya que solo recibiremos el tipo que necesitamos.
factoria.dameServicio(MiProyectoPython)
El imagen abstracta del diseño:
imagen de la factoria
###Servicios Programación:
Para la implementación de los servicios de programación utilizaremos un diseño que compile los datos del proyecto y los ejecute con los datos proporcionados por el usuario. Este diseño debera generar los datos correctos y comprobarlos o identificar fallos en su compilación o ejecución. Parando su ejecución o informando.
Como el objetivo de esta aplicación es a realización de un repositorio y no la creación de un compilador/ejecutor de programas en codigo java. Utilizaremos un puente de comunicación con el bash del Sistema operativo con el que este albergado. Así nace el concepto de Ejecución, ya que la aplicación debera llamar al sistema para que ejecute las instrucciones. Debido al enfoque de este diseño sera necesario tener desplegado en el sistema todas sus opciones (ejecución y compilado de proyectos) y desarrollar estas opciones para los diveros lenguajes bash.
Este orientación es muy desfavorable en lo que se refiere a seguridad, todo dato pasa a ser ejecutado por el sistema, sin ningún tipo de protección salvo su parada y con muchos efectos adversos contra las demas aplicaciones o proyectos. Una posible mejora sería la creación de la capa Execution Enviroment Layer mediante Virtual machines de cada usuario y este se comunicara por ssh.
###Servicios Especiales:
Los servicios especiales de momento solo están orientados a la gestión de ficheros. Para facilitar el uso de estas jerarquias y sus modificaciones. Se creara un servicio que controle el protocolo git, que acceda a los repositorios de los usuarios y clone sus proyectos, ademas, actualice los datos cuando encuentre algún tipo de modificación.
Para la realización de este objetivo se ha encontrado la libreria JGit libreria que ayuda a la conexión con repositorios GIT.