¿Que es un Framework? ¿Como puedo desarrollar un framework propio?

Muchos de los que nos dedicamos al desarrollo de software utilizamos, conocemos o, como mínimo, nos hemos tropezado con el concepto de framework (cuya traducción aproximada sería “marco de trabajo”). En concreto, y por diferentes motivos, he hecho algún pinito utilizando JavaServer Faces así como en Ruby on Rails. Sin embargo, el concepto de framework no es sencillo de definir, a pesar de que cualquiera con experiencia programando captará su sentido de manera casi intuitiva, y es muy posible que esté utilizando su propio framework (aunque no lo llame así).

¿Cuál es el sentido de un framework?
Sabemos por experiencia lo importante que es la normalización de datos en cualquier aplicación. Los usuarios pueden manejar su información en papel, fichas, en su propia memoria, tenerla duplicada, con incoherencias, omisiones, … ¡Todo un infierno! Pero una aplicación informática necesita que esa información esté estructurada de un modo conocido para poder manejarla: almacenarla, recuperarla, y todos los “-arla” que se requieran. Para eso definimos modelos de datos con una determinada estructura (que habitualmente se convierten en tablas de una base de datos). Pero ¿qué ocurre con la información que manejamos los propios desarrolladores para crear una aplicación? Léase código fuente, librerías, ficheros de configuración, etc. Muchas veces parece que la única elección importante es la tecnología concreta a utilizar (lenguaje de programación, gestor de bases de datos, etc.) pero, a partir de ahí, cada programador puede crear su propio maremagnum de ficheros y código fuente.

¿Por qué permitir ese “desorden” en un desarrollo, si estamos tan convencidos de las bondades de estructurar y normalizar la información? Eso es ni más ni menos lo que pretende un framework. Entonces ¿qué es un ‘framework’?Siendo muy simple, es un esquema (un esqueleto, un patrón) para el desarrollo y/o la implementación de una aplicación. Sí, es una definición muy genérica, pero también puede serlo un framework: sin ir más lejos, el paradigma MVC (Model-View-Controller) dice poco más que “separa en tu aplicación la gestión de los datos, las operaciones, y la presentación”. En el otro extremo, otros frameworks pueden llegar al detalle de definir los nombres de ficheros, su estructura, las convenciones de programación, etc.
Pongamos un ejemplo: una aplicación web que utilice Java como lenguaje de programación puede implementarse de multitud de formas, mediante servlets y JSPs. Hay algunas convenciones que es necesario seguir, como usar un fichero de configuración web.xml, pero el programador sigue sin tener un patrón claro a seguir para la creación de servlets, clases, JSPs, etc.

En una primera estandarización, la utilización de una arquitectura MVC aconseja que separemos la lógica de la aplicación (en los servlets) de la presentación (usando JSPs); en concreto, no sería correcto codificar lógica de aplicación o accesos a base de datos dentro de los JSP.
Un paso más allá: utilizando Faces como framework, la estructura de la aplicación queda todavía más definida: un único servlet (FacesServlet) va a controlar el flujo de la aplicación; además, el uso de un fichero concreto (faces-config.xml) permite crear la navegación de la aplicación, definir los objetos (beans) pasados como parámetros, etc., todo ello sin necesidad de codificarlo en Java o JSP. Los frameworks no necesariamente están ligados a un lenguaje concreto, aunque sea así en muchas ocasiones. En el cada vez más popular Ruby on Rails, ‘Ruby’ es el lenguaje de programación y ‘Rails’ el framework; por otro lado, JavaServer Faces está orientado a desarrollos en Java. Sin embargo, nada impide definir el mismo framework para lenguajes diferentes: por ejemplo, existe un framework llamado Biscuit cuyo objetivo es prácticamente convertirse en un “PHP on Rails”. Eso sí, cuanto más detallado es el framework, más necesidad tendrá de ceñirse a un lenguaje concreto.
También es posible que el framework defina una estructura para una aplicación completa, o bien sólo se centre en un aspecto de ella. Siguiendo con los ejemplos, Ruby on Rails ofrece un marco para el desarrollo completo de una aplicación web, mientras que JavaServer Faces está más orientado a la interfaz de usuario.

¿Qué ventajas tiene utilizar un ‘framework’?Las que se derivan de utilizar un estándar; entre otras:
El programador no necesita plantearse una estructura global de la aplicación, sino que el framework le proporciona un esqueleto que hay que “rellenar”. Facilita la colaboración. Cualquiera que haya tenido que “pelearse” con el código fuente de otro programador (¡o incluso con el propio, pasado algún tiempo!) sabrá lo difícil que es entenderlo y modificarlo; por tanto, todo lo que sea definir y estandarizar va a ahorrar tiempo y trabajo a los desarrollos colaborativos. Es más fácil encontrar herramientas (utilidades, librerías) adaptadas al framework concreto para facilitar el desarrollo.

¿Y si no necesito o no quiero utilizar un ‘framework’?
Por supuesto, un desarrollador puede crear toda una aplicación sin seguir ningún framework conocido; puede que sea tan pequeña que no lo considere necesario, que no conozca ninguno que se adapte a sus necesidades, o simplemente no desee dedicar tiempo a seleccionar y utilizar uno.
Sin embargo, a medida que la aplicación crece, un programador competente procurará seguir unas determinadas pautas que le faciliten su trabajo de desarrollo y mantenimiento: separación de presentación y lógica, una sintaxis coherente, etc. La evolución natural sera hacia que, de algún modo, se construirá su propio framework.
Y en vez de definir un estándar, ¿por qué no utilizar uno ya definido, y aprovechar el trabajo de otros muchos desarrolladores? Hacer un desarrollo críptico y difícil de interpretar puede ser útil en un concurso de código ofuscado o para presumir de “gurú”, pero es muy poco útil para desarrollar y mantener una aplicación. El coste inicial (la curva de aprendizaje) de utilizar un framework se compense probablemente en cuanto el trabajo de desarrollo crezca mínimamente. De acuerdo; pero ¿qué ‘framework’ utilizo?Buscando en la red se encuentra mucha información sobre los frameworks existentes para las diferentes plataformas y lenguajes. Posiblemente uno de sus principales problemas es que haya demasiados: ya se sabe, lo bueno de los estándares es que hay muchos para elegir . Sin embargo, la elección del framework concreto a utilizar vendrá marcada por:
El tipo de aplicación a desarrollar El lenguaje de programación y otras tecnologías concretas: base de datos, sistema operativo, etc. Como introducción a los frameworks, Ruby on Rails me parece una buena opción para desarrollar una aplicación web y como ejemplo de lo que es un framework. Dentro del mundo Java, Struts parece uno de los más extendidos.

En conclusiónLa utilización de un framework en el desarrollo de una aplicación implica un cierto coste inicial de aprendizaje, aunque a largo plazo es probable que facilite tanto el desarrollo como el mantenimiento. Existen multitud de frameworks orientados a diferentes lenguajes, funcionalidades, etc. Aunque la elección de uno de ellos puede ser una tarea complicada, lo más probable que a largo plazo sólo los mejor definidos (o más utilizados, que no siempre coinciden con los primeros) permanezcan. Y si ninguno de ellos se adapta a las necesidades de desarrollo, siempre es mejor definir uno propio que desarrollar “al por mayor”.

El futuro esta en nuestros bolsillos, Tecnología Mobile…

Hace unos días estuve leyendo el diario Peru 21 y encontre una noticia relacionada con la SBS, donde el funcionario Javier Poggi, jefe de la Superintendencia de Banca y seguros anunciaba que su entidad recibira apoyo del Banco Interamericano de Desarrollo (Bid) para la implementacion de un sistema de consulta movil , orientado a que los usuarios del sistema financiero puedan realizar las operaciones desde su dispositivo movil, Celular, Palm, Poket PC etc.

La gran pregunta que surgio en mi cabeza fue…  ¿Que tan primitivo pueden ser nuestros sistemas? es decir aqui en perú he notado que no existe la cultura de soluciones orientadas a cumplir exitosamente las necesidades de nuestro mercado. Hace 4 años desarrolle un sistema de Gestion de portal para una marca muy reconocida en el mercado, este sistema tiene una arquitectura lo suficientemente robusta para inplmentar competencia del mercado movil. (Mobile Architecture), es decir es capaz de inplementar estas interfaces para dispositivos moviles en nuestro mercado.

Ahora, eso fue hace casi 5 años ya, noto un gran inconveniente con las aplicaciones de nuestro medio, creo que ninguna esta lista para poder escalar hacia una solucion movil, me gustaria hacerle la pregunta a las personas que leen mi blog :)¿Sus aplicaciones complejas, si esas que inplementan infinitas capas y que son excelentemente agiles en la web  o en una pc cliente… soportarian tecnología movil? ¿Es sencillo que migren o que se comporten de la misma forma en un dispositivo movil?Necesitamos hacer crecer la fuerza de esta tecnología que ya esta siendo día a día  de usuarios en europa, asia y america del norte, amigos Arquitectos, ingenieros, analistas,desarrolladores todos… un  nota para reflexionar el futuro esta en nuestras manos, un saludo a todos exitos :)

Mobile Web Application Architecture

 Haciendo “inca Pie” a una sugerencia particular de mi amigo el “zorro” aqui les dejo una explicación dinamica de la Arquitectura de una aplicacion Web Mobile. La presentacion pertenece al curso oficial de certificacion Microsoft (2514).

Es importante amigos que conozcamos el material de construccion de nuestro edificio antes de iniciar las obras, microsoft nos provee de una serie de herramientas y tecnologías desde la version 2003 y ahora la pronto esperada CodName Orcas, herramiemtas que nos facilitaran el desarrollo de nuevas innovaciones tecnologicas.

La era mobile esta cada vez mas cerca… Aprende, desarrolla y inplementa :)

Mobile Web - Arquitectura

Usando SQL Caching y Dependencias

Aun no puedo publicar mi articulo propio por falta de tiempo :( pero aqui les dejo un excelenete ejemplo de como trabajar con SQL caching en Asp.Net 2.0 y sql server 2005, como muchos ya sabemos el manejo de la cache de nuestras aplicaciones es de vital importancia para asegurar el optimo funcionamiento de nuestras paginas estregadas, existe mas de una tecnica de manejo de cache, desde paginas, por controles, etc. Y ahora les dejo este ejemplo para que conoscan como manejar la cache administrada desde SQL server.

Ademas considero necesario que tambien conozcan la Arquitectura de una aplicacion con manejo de cache.

The Caching Layer (CL) is Another Layer in Our    Architecture

Entonces entendiendo el concepto de arquitectura de una aplicacion de este tipo podemos pasar a este excelente tutorial que nos indicara paso a paso como administrar la cache desde nuestro buen amigo SQL server 2005.

Espero disfruten del Caso Practico :)
Saludos ,
Daniel

Una mas de Web Service factory

¿Inventar la rueda? en que puede variar las matematicas y la fisica ya demostraron hace mucho tiempo cuales son las cualidades principales de ella ¿Como crear una nueva rueda? esta y otras son las preguntas que inertemente nos realizamos dia a dia en el desarrollo de patrones de arquitectura basados en tecnologia y bloques de codigos ya existentes.

¿Como podemos crear nuevos patrones con nuestra propia logica? para empezar que requisitos son indispensables y necesarios para  que nuestro patron inplemente la funcionalidad que deseamos… Una de las famosas respuestas que siempre eh escuchado en los eventos es la siguiente “Que se conecte con mi origen de datos” o “Que inplemente objetos comunes para ser serializados y consumidos”… la gran pregunta… ¿Acaso eso no esta inventado? :S

un post de reflexion, mi sugerencia particular es directa a las venas… Usen, inplemente y Mejoren la Rueda.

Aqui les dejo el codigo fuente de un esenario interesante sobre Web Service factory, hands on Lab
Saludos,
Daniel

WebService Factory en acción

Ya esta disponible la ultima version del webservice factory, una herramienta de Arquitectura y modelamiento de codigo fuente disponible para VB.net y C#.

Web Service Software Factory provee de un conjunto de prácticas probadas para la construcción de aplicaciones distribuidas. Estas prácticas son expuestas a través de tecnicas cocretas, patrones relacionados al mundo de los servicios web, guias HOW Tos paso a paso, incluso una implementacion de referencia en otras palabras un ejemplo practico y por si fuera poco han desarrollando sobre el GAT una herramienta automatizada que se instala sobre Visual Studio 2005 para la debida creacion de servicios web, asi que tu nada mas usas esta herramienta y ya tienes un servicio web de primer nivel que contempla interface de servicio, contratos, excepciones y demas. En si  Web Service Software Factory es lo que necesitas para ponerte al dia en esta area de la tecnologia y la mejor parte de todo esto es que todo lo hace con WCF (Windows Communication Foundation) que es el presente y futuro para contruir servicio web altamente confiables.  Recuerda que WCF es parte del core de Windows Vista (la nueva version del sistema operativo de Microsoft) asi que invertir en esto es invertir en el futuro.

Mas detalles en : http://msdn2.microsoft.com/en-us/library/aa480534.aspx

What Is the Service Factory?

Generally speaking, software factories represent a collection of guidance that helps architects and developers build a specific kind of application. Therefore, the Service Factory helps developers and architects build Web service applications. Web service applications are more than just the technologies that send and receive SOAP messages and expose WSDL contracts—they also include the functionality that is needed to fulfill the service’s behavior. Figure 1 illustrates the parts of the application, and their relationship with one another, the Service Factory will help you build.

Diseñando Aplicaciones SOA (Excelente!!)

Diseñando Aplicaciones Orquestadoras con Visual Studio.net 2005
En este documento encontre una arquitectura bastante interesante, en el documento conoceran el modelo de Arquitectura Orientada a Servicios (Service-Oriented Architecture, SOA), el nuevo modelo de aplicaciones orientada a servicios nos pertime escalabilidad, conectividad y sobre todo disponibilidad de la información de alto rendimiento.

Espero que les sirva este proyecto demo de la Universidad de la Republica. Aplicaciones Orquestadoras

Cómo crear ofuscación Empresarial (Excelente !!)

Estuve leyendo este articulo acerca de Cómo crear ofuscación Empresaria y me parecio super interesante ademas esta completisimo. aqui les dejo el link para que lo revisen.

Saludos Arquitectos