Herramientas de usuario

Herramientas del sitio


simo:documentos:tecnicos:arquitectura

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
simo:documentos:tecnicos:arquitectura [2017/10/12 04:36]
lgomez se ha restaurado la vieja versión (2017/10/12 04:32)
simo:documentos:tecnicos:arquitectura [2019/06/13 21:30] (actual)
caardila [ARQUITECTURA DE SISTEMA SIMO]
Línea 1: Línea 1:
-====== ARQUITECTURA DE SISTEMA SIMO ======+__false__
  
 ===== INTRODUCCIÓN ===== ===== INTRODUCCIÓN =====
Línea 84: Línea 84:
 La arquitectura del sistema se describe en el siguiente diagrama: La arquitectura del sistema se describe en el siguiente diagrama:
  
-[[:​ea:​tobe:​aplicaciones:​sigeca:​sigeca1.png?​426x606}}|sigeca1.png]]+{{:​ea:​tobe:​aplicaciones:​sigeca:​sigeca1.png?​426x606}}
  
 El diagrama ilustra una arquitectura tipo SOA, basada en servicios Web  Restful alojados en un servidor liviano construido con base en el  framework de desarrollo Spring que se ejecuta sobre un contenedor Web  Java. El diagrama ilustra una arquitectura tipo SOA, basada en servicios Web  Restful alojados en un servidor liviano construido con base en el  framework de desarrollo Spring que se ejecuta sobre un contenedor Web  Java.
Línea 91: Línea 91:
  
     - **[[:​ea:​tobe:​aplicaciones:​sigeca:​framework|FrameWork]] Spring + J2EE:** Este framework junto con los servicios J2EE del contenedor Web que  aloja la aplicación,​ es el encargado de proveer todos los servicios de  integración,​ seguridad, acceso a datos, transacciones,​ aspectos, ​ inyección de dependencias e inversión de control, junto a varios más que  dan soporte a la arquitectura del lado del servidor. Si bien Spring ​ puede ser utilizado de muchas formas, en esta propuesta se utiliza para  inplementar una arquitectura de tipo servidor liviano, donde se delega ​ gran parte de la responsabilidad de renderización de la interfaz gráfica ​ al navegador, permitiendo una reducción en el consumo de recursos del  lado del servidor y facilitando su escalamiento. Del entorno J2EE se  utilizan los componentes de la especificación Web (principalmente ​ Servlets) por lo cual es posible desplegar la aplicación en un  contenedor Web Java liviano como Apache Tomcat o Jetty.     - **[[:​ea:​tobe:​aplicaciones:​sigeca:​framework|FrameWork]] Spring + J2EE:** Este framework junto con los servicios J2EE del contenedor Web que  aloja la aplicación,​ es el encargado de proveer todos los servicios de  integración,​ seguridad, acceso a datos, transacciones,​ aspectos, ​ inyección de dependencias e inversión de control, junto a varios más que  dan soporte a la arquitectura del lado del servidor. Si bien Spring ​ puede ser utilizado de muchas formas, en esta propuesta se utiliza para  inplementar una arquitectura de tipo servidor liviano, donde se delega ​ gran parte de la responsabilidad de renderización de la interfaz gráfica ​ al navegador, permitiendo una reducción en el consumo de recursos del  lado del servidor y facilitando su escalamiento. Del entorno J2EE se  utilizan los componentes de la especificación Web (principalmente ​ Servlets) por lo cual es posible desplegar la aplicación en un  contenedor Web Java liviano como Apache Tomcat o Jetty.
-    - **Entidad JPA:​** ​     Este componente representa un  objeto de dominio (Referencia) y a su vez contiene la información que  permite mapear los objetos de dominio a las tablas en el sistema de  persistencia. ​ Esta información sigue la especificación JPA de Java. El modelo de dominio puede ser consultado en la siguiente página [[:​simo:​documentos:​tecnicos:​dominio|Modelo de dominio]] ​  +    - **Entidad JPA:​** ​   Este componente representa un  objeto de dominio (Referencia) y a su vez contiene la información que  permite mapear los objetos de dominio a las tablas en el sistema de  persistencia. ​ Esta información sigue la especificación JPA de Java. El modelo de dominio puede ser consultado en la siguiente página [[:​simo:​documentos:​tecnicos:​dominio|Modelo de dominio]] 
-    - **Hibernate:​** ​    ​Este componente se encarga de realizar el mapeo relacional a objeto y manejar el ciclo de vida de las entidades JPA +    - **Hibernate ​+ Hibernate Search:**      Este componente se encarga de realizar el mapeo relacional a objeto y manejar el ciclo de vida de las entidades JPA, también integra el motor de indexamiento Full Text de Lucene para indexar los datos de la base de datos. Una descripción más detallada puede ser encontrada acá [[:​simo:​documentos:​tecnicos:​hibernate|Hibernate y Hibernate Search]] 
-    - **Repositorio Spring JPA:​** ​     Este componente es  una interfaz que al ser implementada por Spring proporciona las  operaciones CRUD y los métodos de búsqueda definidos por el  desarrollador. Solo basta definir las firmas de los métodos de búsqueda y  Spring se encarga de proporcionar todo el código, ​para mantener la  arquitectura SOA (referencia)lo ideal es crear un repositorio por  Entidad principal (Objeto de dominio) +    - **Repositorio Spring JPA:​** ​   Este componente es  una interfaz que al ser implementada por Spring proporciona las  operaciones CRUD y los métodos de búsqueda definidos por el  desarrollador. Solo basta definir las firmas de los métodos de búsqueda y  Spring se encarga de proporcionar todo el código, ​idealmentedebe existir ​un repositorio por  Entidad principal (Objeto de dominio). Estos repositorios han sido aumentados mediante una implementación base genérica que soportar métodos de búsqueda de aplicación general. Ver [[:​simo:​documentos:​tecnicos:​repositorios|Capa de Repositorios Spring Data]] ​ 
-    - **Servicio Spring: **      Este componente ​ implementa los métodos de negocio de cada módulo, lo ideal es crear un  servicio por repositorio Spring, a través de los mecanismos de inyección ​ de dependencias de Spring, el componente obtiene referencias al  repositorio Spring y a cualquier otro servicio que se requiera. Si no se  requieren métodos de negocio distintos a las operaciones CRUD  tradicionales,​ este componente puede ser obviado. +    - **Servicio Spring: **    Este componente ​ implementa los métodos de negocio de cada módulo, lo ideal es crear un  servicio por repositorio Spring, a través de los mecanismos de inyección ​ de dependencias de Spring, el componente obtiene referencias al  repositorio Spring y a cualquier otro servicio que se requiera. Si no se  requieren métodos de negocio distintos a las operaciones CRUD  tradicionales,​ este componente puede ser obviado. ​Ver [[:​simo:​documentos:​tecnicos:​servicio|Capa de Servicios]] 
-    - **Controlador REST:​** ​    ​Este componente se encarga ​ de exponer los servicios del repositorio Spring y del Servicio Spring ​ utilizando el estándar REST, también mediante inyección de dependencias, ​ el controlador puede acceder a los métodos CRUD del repositorio Spring o  a los métodos de negocio del Servicio Spring.. El estándar REST indica ​ que las operaciones de inserción se debe realizar usando el método HTTP  Post, las de consulta Get, las de modificación PUT y las de eliminación ​ DELETE. ​ Este componente se encarga de crear manejadores para cada uno  de estos métodos HTTP y enlazarlos a los métodos en los otros  componentes. La principal diferencia con los controladores tradicionales ​ (Por ejemplo JSF) es que en este caso no se está generando HTML sino  que se producen cadenas JSON que son intercambiadas con el navegador, ​ estas cadenas son inherentemente más livianas y simples que HTML y  proporcionan una mayor flexibilidad y una mejor separación de  responsabilidades puesto que ofrecen una representación uniforme, ​ simplificada y libre de información de formateo. +    - **Controlador REST:​** ​     Este componente se encarga ​ de exponer los servicios del repositorio Spring y del Servicio Spring ​ utilizando el estándar REST, también mediante inyección de dependencias, ​ el controlador puede acceder a los métodos CRUD del repositorio Spring o  a los métodos de negocio del Servicio Spring.. El estándar REST indica ​ que las operaciones de inserción se debe realizar usando el método HTTP  Post, las de consulta Get, las de modificación PUT y las de eliminación ​ DELETE. ​ Este componente se encarga de crear manejadores para cada uno  de estos métodos HTTP y enlazarlos a los métodos en los otros  componentes. La principal diferencia con los controladores tradicionales ​ (Por ejemplo JSF) es que en este caso no se está generando HTML sino  que se producen cadenas JSON que son intercambiadas con el navegador, ​ estas cadenas son inherentemente más livianas y simples que HTML y  proporcionan una mayor flexibilidad y una mejor separación de  responsabilidades puesto que ofrecen una representación uniforme, ​ simplificada y libre de información de formateo. ​Ver [[:​simo:​documentos:​tecnicos:​controlador|Capa de Controladores REST]] 
-    - **Página HTML + Componentes DOJO: **    La interfaz ​ de usuario se crea y ejecuta enteramente en el servidor y consiste de  páginas HTML y componentes DOJO que son componentes [[:​simo:​documentos:​tecnicos:​javascript|JavaScript]] modularizados bajo el estándar AMD.  Se propone el uso de dos tipos de  componentes DOJO que colaboran entre sí, por un lado los Widgets ​ proporcionan los componentes gráficos y por otro, los store se encargan ​ de acceder a los recursos REST en el servidor y adaptar esta información ​ para los Widget, de esta forma se logra una interfaz de usuario ríca en  funcionalidades,​ modular, simple y limpia.+    - **Página HTML + Componentes DOJO: **     ​La interfaz ​ de usuario se crea y ejecuta enteramente en el servidor y consiste de  páginas HTML y componentes DOJO que son componentes [[:​simo:​documentos:​tecnicos:​javascript|JavaScript]] modularizados bajo el estándar AMD.  Se propone el uso de dos tipos de  componentes DOJO que colaboran entre sí, por un lado los Widgets ​ proporcionan los componentes gráficos y por otro, los store se encargan ​ de acceder a los recursos REST en el servidor y adaptar esta información ​ para los Widget, de esta forma se logra una interfaz de usuario ríca en  funcionalidades,​ modular, simple y limpia. ​Ver [[:​simo:​documentos:​tecnicos:​ui|Capa UI Javascript]]
  
simo/documentos/tecnicos/arquitectura.1507782969.txt.gz · Última modificación: 2017/10/12 04:36 por lgomez