Patrón Arquitectónico Empleado


Dado que la aplicación IDIS COLABORATIVA fue desarrollada bajo el marco de trabajo Codeigniter, el cual esta fuertemente ligado al patrón de diseño MVC, nuestro patrón de diseño no podía ser otro diferente, además porque es un patrón que facilita el trabajo distribuido y la integración de desarrollos independientes de una manera extraordinaria que fue más que adecuado teniendo en cuenta la celeridad con la cual tuvo que desarrollarse la presente aplicación.




Nuestra aplicación se compone de 3 capas a saber, la capa de presentación o de alto nivel, la capa de lógica de aplicación o capa intermedia y la capa de acceso a recursos o capa de bajo nivel, a continuación se procede a detallar la manera como se implemento cada una de estas capas y su estrecha relación.




Capa de Presentación o de Alto Nivel

También denominada vista lógica de la arquitectura, esta representada por las vistas empleadas para renderizar la información empleada para interactuar con el usuario. Contenidas en la carpeta denominada views para una fácil ubicación e identificación tal y como se puede observar en la imagen presentada de la arquitectura de carpetas proporcionada por el marco de trabajo y complementada o ajustada a las necesidades particulares para esta aplicación. Se realizo un considerable número de vistas para proporcionar una completa y detallada información al usuario dependiendo de su ubicación o de sus acciones, todas estas conservando coherentemente un estilo uniforme tomado de una plantilla css que garantizo una imagen profesional y acorde con los estándares de presentación requeridos por el cliente. 
Como establece el patrón de diseño MVC las vistas fueron llamadas desde los controladores y se utilizaron para recoger información de los usuarios como en el caso de los formularios o para entregar información a los mismos acerca de procedimientos solicitados o de datos consultados por estos y extraídos de la base de datos por medio de los modelos.        
Capa de Lógica de Aplicación o de Nivel Medio       
Capa encargada de implementar la lógica de negocio, es decir, de darle tramite a las solicitudes realizadas por los usuarios a través de la capa de presentación, por lo cual estas dos capas se encuentran fuertemente ligadas. La lógica de aplicación esta representada bajo el patrón MVC por los controladores y para el caso concreto de nuestra aplicación decidimos implementarla utilizando el patrón especifico de un controlador por página (Page Controller), que aun cuando dificulta el proceso de seguridad nos permitió estructurar en gran detalle nuestra aplicación haciendo controladores especializados que solo atendieran una determinada solicitud o grupo de solicitudes relacionadas beneficiando la modularidad e independencia de los controladores. Éstos se encuentra almacenados en una carpeta denominada controllers y todos tienen nombres con la terminación controller para facilitar su identificación.
 
Siguiendo las reglas establecidas por el patrón MVC, los controladores se encargaron de recibir las solicitudes e información proporcionada por los usuarios, para realizar el llamado del adecuado modelo que extrajera o almacenara la información en la base de datos de acuerdo al tipo de solicitud recibida, y posteriormente por medio de las vistas renderizar la información pedida o informar del éxito o fracaso de la operación.        
Capa de Datos o Bajo Nivel          
 Capa puente encargada de mediar entre los controladores y la base de datos, es la única que puede tener acceso directo a la información almacenada en la base de datos. Gracias al helper database proporcionado por el marco de trabajo de codeIgniter pudimos implementar esta capa con relativa facilidad en un muy reducido número de líneas para cada función de almacenamiento o consulta. Los modelos empleados se encuentran almacenados en una carpeta denominada models y cada uno de ellos tiene la terminación model para facilitar su ubicación y por ende el entendimiento de la aplicación por terceros. Se realizo un modelo para cada controlador y en cada uno de estos se implementaron todas las funciones que el controlador requería para realizar de manera integra sus funciones.