Muestra las diferencias entre dos versiones de la página.
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, idealmente, debe 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]] |