The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Kumbia Enterprise permite el desarrollo de aplicaciones en varias capas esto permite romper un sistema en subsistemas más pequeños reduciendo la complejidad del mismo y proporcionando importantes beneficios.
Cuando se trabaja con un sistema multi-capa se entiende que existen capas de alto nivel y otras de menor nivel, las de mayor nivel aprovechan la funcionalidad implementada en las capas inferiores ocultando detalles que no requieren de un entendimiento inmediato aunque reduciendo la flexibilidad en una u otra medida.
Los principales beneficios de implementar sistemas multi-capa son:
Es posible trabajar sobre una capa superior sin necesidad de conocer como funcionan las capas inferiores. Cuando desarrolla con Kumbia Enterprise utiliza una capa de alto nivel que aumenta la productividad sin requerir el entendimiento en profundidad de comportamientos ó funcionalidad de bajo nivel.
Una capa puede ser sustituida por otra manteniendo una interface consistente que se adapte a necesidades especificas sin modificar la aplicación por completo.
Capas en una Aplicación
Una aplicación Web desarrollada en Kumbia se separa en 3 capas principales llamadas: Lógica de Dominio, Persistencia y Presentación.
La lógica de dominio ó de negocio es quien dicta las reglas sobre como debe trabajar la aplicación en si. Constituye todo lo que tiene que ver con cálculos de entrada de datos, validaciones, procesos y como se presentaran los datos en la capa de presentación.
La persistencia y/ó lógica del modelo de datos trata sobre como la lógica de dominio requiere de los datos que le proporcionan servicios de bases de datos, sistemas de transacciones, mensajes, sistemas de archivos, etc.
La presentación trata de todos aquellos elementos que permiten la interacción entre el usuario final y la aplicación. En una aplicación Web se refiere además a las tecnologías de lado del cliente como CSS ó JavaScript, los navegadores, los lenguajes de marcas y de transformación.
Cada capa mencionada anteriormente ofrece servicios y tiene responsabilidades diferentes en una aplicación empresarial, la clara separación de estas capas es fundamental para un desarrollo satisfactorio. Los componentes para la administración y uso de cada capa son proporcionados por el framework así como servicios de integración entre ellos también.
Usando Modelo-Vista-Controlador
Las aplicaciones en Kumbia utilizan el patrón arquitectacional llamado MVC. Con él las aplicaciones Web se pueden separar en 3 capas bien definidas ayudando a la mantenibilidad de la misma y exigiendo un orden y claridad que con el tiempo alarga la vida útil de las mismas.
Modelos: Representan la información sobre la cual la aplicación opera, las entidades y su lógica de negocio. Contienen todas las validaciones, constraints y reglas que hacen que la lógica del negocio se cumpla y haya integridad en los datos. Corresponde a la capa de persistencia.
Vistas: Visualizan el modelo usando interfaces Web e interactuando con los usuarios de éstas. Corresponde a la capa de Presentación.
Controladores: Atienden, responden y enrutan las acciones solicitadas por el usuario final e invocan cambios en las vistas ó en los modelos según sea necesario. Corresponde a la capa de lógica de dominio.
Los controladores están separados en partes, llamadas front controller y en un conjunto de acciones. Cada acción puede interactuar de forma diferente de acuerdo al tipo de petición. Las vistas están separadas en layouts, templates, vistas de acción y partials. El modelo ofrece una capa de abstracción de la base de datos llamada ORM que además dan funcionalidad agregada a datos de sesión y validación de integridad relacional.
Este modelo ayuda a separar el trabajo de la lógica de negocios (modelos) y la presentación (Vistas)
El controlador ayuda a ocultar los detalles de protocolo utilizados en la petición (HTTP, modo consola, etc.) para el modelo y la vista. Finalmente, el modelo abstrae la lógica de datos, que hace a los modelos independientes de las vistas.
Kumbia Enterprise Framework agrega componentes y plugins que interactúan con la arquitectura de la aplicación.
Al implementar el patrón arquitectacional MVC es posible separar claramente la forma en la que se presenta la información, de la forma en la que se almacena, de la forma en la que orquesta la lógica de la aplicación. De esta forma es menos complicado:
Detectar en que capa se esta generando un problema de la aplicación. Por ejemplo si un proceso no se esta ejecutando correctamente es muy probable que el problema este en el controlador.
Si se agrega un nuevo constraint (restricción) al modelo de datos este se aplica a todo el sistema inmediatamente.
Si los diseñadores requieren trabajar en la presentación esto es posible sin que se afecte la lógica de negocio ó el modelo de datos.
Definitivamente la aplicación se hace más mantenible y reusable creando unidades que interactúan entre si y están separadas en forma lógica de manera clara.
Arquitectura SOA
La arquitectura SOA proporciona estrategias al desarrollo e integración de infraestructuras de software que permiten utilizar la funcionalidad de un sistema como servicios interoperables. Las arquitecturas SOA permiten el intercambio transparente de datos entre diferentes aplicaciones. Un SOA permite que haya loose coupling de servicios entre diferentes aplicaciones, sistemas operativos y lenguajes de desarrollo.
Por muchos años las empresas han tratado de integrar múltiples aplicaciones con el fin de apoyar los procesos de negocio en cada uno de sus departamentos y de ofrecer de forma automatizada información a sus proveedores y clientes.
Durante estos procesos es normal encontrarse con inconvenientes como incompatibilidad entre lenguajes, formatos, plataformas, etc. Por esto la industria tecnológica ha creado todo tipo de estrategías que conlleven al mejoramiento y exito de este tipo de integraciones.
SOA es una estrategía que no es aplicable a todo tipo de organizaciones pero si es muy recomendable. En el mundo PHP esta arquitectura ha sido poco adoptada debido a su poco desarrollo, exploración y culturización. Actuamente PHP proporciona librerias y funcionalidad que permite ofrecer servicios web usando diferentes protocolos, pero SOA es mucho más que servicios web.
Los siguientes conceptos son parte de lo que representa una arquitectura SOA:
SOA Governance: Son todas las actividades relacionadas a tener control sobre una SOA. En términos cortos se puede decir que son las reglas con las que se implementa y adopta esta arquitectura.
Orquestación y Coreografía de Servicios: Aunque no es directamente dependiente de una SOA es fundamental cuando se implementan procesos de negocio complejos.
Business Process Management: Permite el mejoramiento y optimización de procesos de negocio aprovechando la arquitectura en si misma.
Y aunque existen muchos más, Kumbia Enterprise ha trabajo en proporcionar herramientas que permitan la rápida adopción de un arquitectura orientada a servicios basada en PHP y su objetivo es ofrecer un ambiente cada vez más robusto que permita lograr este objetivo.
Beneficios de una SOA
Las tres beneficios más importantes de adoptar una arquitectura SOA son:
Al generar cada unidad de negocio como un servicio y poder usarlo rápidamente en una aplicación, se promueve la agilidad al cambio en forma más efectiva que mediante sistemas aislados .
Al utilizar servicios se crean abstracciones autosuficientes capaces de mejorarsen afectando en forma positiva a sus dependencias en forma transparente.
Los servicios son en cierta forma auto-documentados lo cual es muy importante al desarrollar sistemas flexibles y adaptables.
SOA en Kumbia Enterprise
En este apartado trataremos de ilustrar como Kumbia Enterprise mediante su contenedor de servicios y aplicaciones permite la rápida adopción de SOA en una organización.
Controladores Inteligentes: Como se vió anteriormente, Kumbia Enterprise utiliza el concepto de controlador, quienes son los que atienden las peticiones realizadas desde el cliente y ejecutan la lógica de negocio adecuada para producir una salida en una vista. El framework proporciona algo que hemos denominado "controladores inteligentes".
Cuando una aplicación en Kumbia Enterprise recibe una petición esta es analizada para determinar el tipo de cliente y tipo de respuesta adecuada que espera este cliente.
El siguiente diagrama muestra el funcionamiento del contenedor:
Según el diagrama una aplicación puede recibir peticiones de diferentes clientes solicitando respuestas adecuadas al tipo de cliente. El diagrama separa a los clientes de las aplicaciones en tres:
Usuarios Finales/Visitantes: Un usuario que utiliza la aplicación y que espera obtener una respuesta humana que pueda entender para continuar realizando otro proceso.
Maquinas Servicios Web: Maquinas que consumen servicios web y que requieren de mantener sesiones conversacionales. Por ejemplo SOAP ó REST.
Maquinas Proceso de Datos: Clientes web que solicitan a aplicaciones datos en formatos adecuados que puedan ser procesados por el mismo cliente. Por ejemplo JSON ó XML.
El contenedor de Kumbia Enterprise analiza el solicitud de respuesta del cliente y transfiere la solicitud al controlador/accion adecuado que en cada uno de los casos tendrá un tratamiento diferente.
La capa Enterprise Service Layer es opcional y cuando se accede directamente a la aplicación esta no existe. La capa es el ESB (Enterprise Service Bus) el cual tiene un servicio registrado y puede modificar y monitorizar el acceso a los servicios.
La capa Domain Layer es una super capa que abstrae la implementación de todos los procesos de negocio. La capa Application Layer son las aplicaciones/controladores/servicios como tal que componen el proceso de negocio requerido.
Loose Coupling/Tight Coupling
Uno de los objetivos de diseño de Kumbia Enterprise Framework es buscar que el arquitecto/desarrollador no tenga que integrar ningún componente para definir la estructura de su aplicación por esta razón varios componentes son dependientes los unos de los otros proporcionando un entorno ready-to-use donde sea posible desarrollar y ejecutar aplicaciones empresariales favoreciendo principios de reusabilidad y rendimiento de cualquier aplicación.
Los patrones de diseño VirtualProxy y DependecyInjection son utilizados para permitirle al desarrollador reemplazar/integrar componentes escritos por terceros a la aplicación.
Muchos otros componentes están pensados en ser débilmente acoplados ó loose coupling de tal forma que puedan ser integrados a otras aplicaciones escritas en otros frameworks.
Kumbia Enterprise Framework ofrece avanzada funcionalidad cuyo nivel de madurez es similar ó superior al de otros frameworks PHP actuales.