Círculo Directo es una empresa con vocación de facilitar la labor del desarrollo de software, bien sea mediante nuestros productos, como en el caso de CD4NET, o mediante la prestación de servicios de desarrollo, formación y consultoría.

El equipo humano que conforma el departamento técnico de la empresa tiene una gran experiencia no solo en la implementación de soluciones tecnológicas, sino en el trato con los profesionales que requieren de sus servicios.

Círculo Directo ofrece soluciones distintas para distintas necesidades. Nuestro ámbito tecnológico de actuación comprende la plataforma .NET y el mundo de los ordenadores IBM i-Series o AS/400 , así como las interelaciones entre ambos.

CD4NET, Generador de Código para AVR.NET


Presentación de CD4NET

CD4NET (Desarrollo de Código para NET) es una herramienta de ayuda para la creación de aplicaciones que acceden a bases de datos DB2/400, Datagate for Windows y SQL Server mediante Datagate for SQL.

CD4NET está formado por:
  • Un generador de código para AVR.NET, especializado en la creación de la capa de acceso a datos.
  • Una librería de clases que conforma la jerarquía de herencia para las clases de capa de datos que se crearán con el generador.
  • Un módulo de Formularios Dinámicos para Windows encargado de conformar la capa de interfaz de usuario para los mantenimientos de los ficheros de la aplicación.


Generación de código

Qué es la generación de código
La generación de código es simplemente código que escribe código.

Un ejemplo de generación de código lo podemos encontrar en el Visual Studio, cada vez que creamos una clase la clase recién creada ya contendrá código, el cual será distinto dependiendo del tipo de clase que hayamos creado. Otro ejemplo dentro del Visual Studio lo podemos encontrar al añadir un control a un formulario de Windows, cuando volvemos al código asociado a dicho formulario podemos ver el nuevo código que se ha insertado cuando hemos añadido el control.

Cuando estamos desarrollando una aplicación podemos observar que hay partes de código que se repiten exactamente, y somos capaces de identificarlas y encapsularlas en métodos o funciones para reutilizar ese código después de haberlo escrito una única vez.

Otro caso distinto se produce cuando observamos que escribimos muchas veces código que sigue un mismo esquema, y que difiere de forma predecible dependiendo de determinados parámetros, pero que no es susceptible de ser encapsulado. Este tipo de código es el candidato perfecto para ser generado automáticamente.

A continuación tenemos un ejemplo de código basado en patrones:

BegProp Id *Integer8 Access(*Public)

    BegGet
        LeaveSr gvId
    EndGet

    BegSet
        gvId = *PropVal
    EndSet

EndProp
BegProp Nombre *String Access(*Public)

    BegGet
        LeaveSr gvNombre
    EndGet

    BegSet
        gvNombre = *PropVal
    EndSet

EndProp


En estas dos declaraciones de propiedades solo varían el nombre y tipo de la propiedad y el nombre de su variable interna asociada, el resto es idéntico. De aquí podríamos extraer el siguiente patrón:

BegProp [NombrePropiedad] [TipoPropiedad] Access(*Public)

    BegGet
        LeaveSr gv[NombrePropiedad]
    EndGet

    BegSet
        gv[NombrePropiedad] = *PropVal
    EndSet

EndProp

Esta es la forma en la que funciona la generación, se separa el patrón de la información variable. El patrón se incorpora en forma de plantillas, mientras que parte de la información variable, que llamaremos metadatos, se extrae desde cualquier fuente disponible al efecto.

Creación de plantillas
Existen distintos tipos de plantillas que se pueden utilizar para la creación de código, entendiendo como plantilla el mecanismo utilizado para implementar el patrón de código con el que combinaremos la parte variable para obtener el código fuente resultante.

De estos tipos destacaré los tres siguientes, por ser los más habituales:
  • Brute Force (Fuerza bruta)


    La plantilla está compuesta por uno o varios programas escritos en cualquier lenguaje de programación, como resultado de los cuales se obtiene el código fuente escrito en ficheros de texto.

    No es necesario conocer ninguna tecnología adicional al lenguaje de programación que se vaya a utilizar para escribir las plantillas.

    El código de los programas que conforman las plantillas puede resultar poco legible, ya que se mezcla el propio código de la plantilla con el de las cadenas de caracteres que se manejan para crear el código resultante que se está generando.

    La modificación o adición de una plantilla implica necesariamente la compilación del propio generador, y por lo tanto disponer de los fuentes del mismo.

  • CodeDOM
    El .NET Framework incorpora el espacio de nombres CodeDOM que permite la generación de código fuente de forma dinámica en tiempo de ejecución.

    Requiere un conocimiento muy específico de las clases que componen este espacio de nombres, las cuales no están especialmente bien documentadas.

    Permite generar código exclusivamente en los tres lenguajes .NET desarrollados por Microsoft: Visual Basic, C# y J#.

    La modificación o adición de una plantilla implica necesariamente la compilación del propio generador, y por lo tanto disponer de los fuentes del mismo.

  • Plantillas escritas en ficheros de texto plano utilizando algún tipo de marcado específico.
    El lenguaje de marcado puede ser cualquiera que se adapte a las necesidades y diseño del generador.

    Es necesario conocer el lenguaje de marcado utilizado en la plantilla.

    No se mezcla el código del generador con el de la plantilla.

    No es necesario disponer de los fuentes ni volver a compilar el generador para modificar una plantilla ni para crear plantillas nuevas.

    Al ser texto plano las plantillas se pueden escribir con cualquier editor, incluyendo el bloc de notas.

Metadatos
Los Metadatos se componen con la parte de información variable que utilizamos para generar código.

La fuente desde la que recuperemos esta información, así como la estructura de la información en sí, dependerá de la naturaleza del código que se vaya a generar.

Normalmente la información necesaria provendrá de más de una fuente, incluyendo información recuperada desde pantallas de captura creadas al efecto, siendo necesario fusionar esta información.

La información obtenida se suele almacenar en un repositorio con el objetivo de poder utilizarla en tantos procesos de generación sea necesario, tantas veces como resulte oportuno.

Reglas básicas
Es imprescindible tener acceso a las plantillas y poder modificarlas o sustituirlas si es necesario.

La obtención de los metadatos debe ser un paso separado de la generación del código.

El código se debe poder generar tantas veces como sea necesario por cualquier persona, esté o no familiarizada con el proyecto, mediante un simple clic del ratón.

Es necesario disponer de mecanismos para contemplar la existencia de código escrito a mano, de manera que este esté protegido en caso de volver a lanzar el proceso de generación.

En lo que respecta a su calidad, rendimiento y mantenimiento, una aplicación en la que se use código generado de forma automática debe ser superior, o al menos igual, a la misma aplicación escrita a mano.

ORM (Mapa Objeto-Relacional)

El desarrollo de aplicaciones orientadas a objetos implica la reutilización de código, pero también implica que es necesario escribir mucho código similar y repetitivo, del cual se pueden extraer patrones, sobre todo en la capa de acceso a datos.

La creación automatizada de las clases de la capa de acceso a datos se suele realizar en base a un mapa que define la relación entre las entidades de la base de datos relacional y las clases que accederán a dichas entidades (Mapa objeto-relacional).

Los pasos a seguir para construir este mapa son los siguientes:
  • Extracción de información desde la base de datos o desde una herramienta de diseño.

  • Definición de las relaciones entre las distintas entidades de la base de datos y las clases del modelo de objetos.

  • Definición de las relaciones entre los campos o columnas de cada entidad de la base de datos y las propiedades de cada objeto del modelo de objetos.

  • Definición de las relaciones entre los distintos objetos del modelo de objetos.

  • Obtención de información adicional para la aplicación.

  • Archivo en un repositorio de la información obtenida para su posterior reutilización.

  • La generación de varios tipos distintos de objetos de negocio.

    Mediante plantillas que puedan ser modificadas de forma que se pueda adaptar el código generado a la evolución de las necesidades.

    Debe ser posible la generación tantas veces como sea necesario mediante un simple clic de ratón.

Estructura de CD4NET

  • Interfaz de captura de información
    Mediante este interfaz de usuario se conduce la captura de información desde la base de datos del i-Series, se recoge la información adicional necesaria para la creación de la capa de datos y la presentación desde los formularios dinámicos y se solicita al motor de generación de código la generación de las clases resultantes.

    Por otra parte, la interfaz de captura de información incluye un diseñador de menús mediante el que podemos definir una estructura de menús arbórea que cargará para su presentación el el ejecutable de aplicación Windows incluido en CD4NET.

  • Repositorio del generador de código
    Toda la información recuperada desde esta interfaz es almacenada en el repositorio del generador de código puede estar ubicado en cualquiera de las bases de datos a las que se tiene acceso desde el cliente de Datagate. De esta forma se puede solicitar las veces que sea necesario la generación de toda la capa de datos de una aplicación, de las clases de uno de los ensamblados que la componen o de una clase específa mediante un clic de ratón, si necesidad de volver a introducir la información sobre la misma.

  • Motor de generación de código
    Este proceso se encarga de recuperar la información desde el repositorio correspondiente a aquellas clases para las que se ha recibido la solicitud de generación. Esta información es convertida a XML y procesada por la plantilla XSLT asociada a cada una de las clases, generándose así el archivo de texto con el código fuente generado.

    Además, si existe un proyecto de AVR.NET en el directorio en el que se genera el archivo de código fuente se comprueba si la clase generada está añadida al proyecto y si no es así se añade automáticamente.

  • Creación de la librería específica de la aplicación
    Para crear la librería correspondiente a las clases generadas utilizamos el Visual Studio para abrir el proyecto y compilarlo. El proyecto debe utilizar la librería de clases proporcionada por CD4NET que contiene la jerarquía de herencia utilizada por las clases de acceso a base de datos cuyo código se ha generado y accederá a la base de datos para recuperar la descripción externa de los ficheros correspondientes. El resultado será la DLL que se utilizará posteriormente en las capas de presentación y reglas de negocio.

  • Librería de clases de forms dinámicos
    CD4NET ofrece una capa de presentación en forma de librería de clases de formularios Windows en la que encontramos clases para la selección y la edición de la información recuperada por las clases de acceso a datos creadas a partir del código generado por el generador.

    Estas clases de presentación analizan mediante reflexión la clases de acceso a datos que reciben como parámetro del constructor y utilizan toda la información de presentación incluida en las mismas que se especificó durante la captura de información adicional en el interfaz del generador para crear dinámicamente en tiempo de ejecución el formulario adecuado al mantenimiento del fichero correspondiente a la clase de acceso a datos.

    La librería de clases de Forms dinámicos puede ser utilizada desde cualquier aplicación Windows creada por el usuario, y es utilizada por el ejecutable de aplicación Windows incluido en CD4NET. Este ejecutable carga el menú de estructura arbórea diseñado desde el Diseñador de Menú incluído en el interfaz del generador, desde el cual se pueden hacer llamadas a los mantenimientos de las entidades de base de datos para las que se han generado clases de acceso a base de datos así como a otros formularios windows desarrollados por el usuario.
Esquema del generador Esquema de los formularios dinámicos

Ventajas de CD4NET

  • El generador de clases de acceso a datos de CD4NET permite que un analista o un programador que conozca la estructura de la base de datos genere el fuente de dichas clases sin necesidad de escribir código.

    Debido a que no es necesario escribir el código se produce un ahorro considerable de tiempo, y por lo tanto de dinero, y se ve reducida al mínimo la necesidad de depuración de errores de codificación.


  • Todas las clases generadas con CD4NET mantienen la misma estructura, por lo que no se depende del estilo de programación de cada uno de los programadores y se simplifica la escritura del código para las capas de negocio e interfaz de usuario.


  • CD4NET aporta una jerarquía de herencia para las clases de acceso a datos que conforma un armazón o “framework” sobre el que se va montando la aplicación, dotándola de una sólida estructura orientada a objetos.

    En el proceso de creación de las clases de acceso a datos se realiza un mapa entre la base de datos relacional existente y el modelo de objetos específico para la aplicación que creamos a través de las clases.

    Mediante la elaboración de este mapa los campos o columnas de las distintas entidades de la base de datos se convierten en propiedades de las nuevas clases.

    Esto mismo ocurre con las relaciones descritas entre las distintas entidades de base de datos, las cuales dan lugar a las propiedades correspondientes en las dos clases de la relación.

    Como ejemplo de lo anterior, para recuperar la dirección de envío completa del cliente correspondiente a un pedido dado sería bastante codificar la siguiente línea:

    tDireccion = tPedido.Cliente.DireccionEnvio.ToString()

    Esto combinado con la tecnología Intellisense del IDE de Visual Studio simplifica el código a escribir para las capas de negocio o presentación, con los consiguientes ahorros de tiempo y de posibilidad de errores, y hace que no sea tan crítico el conocimiento de la estructura de la base de datos para los desarrolladores de las capas de negocio y presentación.


  • La información correspondiente a la estructura de las entidades de la base de datos recuperada directamente desde dichas entidades, así como toda la información adicional recogida durante el proceso de generación de la entidad, es almacenada en un repositorio que permite no tener que volver a definirla en caso de que sea necesario volver a generar la clase por cualquier motivo.

    Esta información es convertida a formato XML para su uso en la generación de la clase.


  • El documento XML que se compone para la generación de la clase a partir de los datos del repositorio, es procesado por plantillas XSLT para la generación del código.

    Estas plantillas pueden ser modificadas en caso de que se desee personalizar el código para las clases generadas automáticamente.

    También es posible crear plantillas distintas a las suministradas que implementen otras funcionalidades. Durante el proceso de captura de información de la entidad se puede asignar dicha entidad a una plantilla distinta a la suministrada, de forma que el resultado generado sea el deseado.


  • El módulo de Formularios Dinámicos, totalmente adaptado a la estructura del modelo de objetos creado mediante el generador de código, permite tener disponible de forma automática una vez que se ha creado la clase un mantenimiento de la entidad de base de datos en la que se basa dicha clase.

    Los programas que componen el módulo de Formularios Dinámicos se adaptan dinámicamente en tiempo de ejecución a las características definidas para la entidad en la clase correspondiente, lo que implica que no es necesario generar nuevos fuentes para la capa de interfaz de usuario.
Círculo Directo ofrece servicios de consultoría, formación y desarrollo para los distintos entornos tecnológicos que componen nuestro ámbito de actuación.

Consultoría

Formación

Ofrecemos servicios de formación para el desarrollo de software en entornos .NET, tanto en C# como en Visual Basic y en ASNA Visual RPG. Así mismo tenemos seminarios para HTML y DHTML, XML y XSLT. La formación está orientada a la empresa, pudiendo llevarse a cabo tanto en sus instalaciones como en las nuestras, y pensando siempre en la máxima adaptación de los seminarios a las necesidades del cliente.

Desarrollo

Realizamos labores de análisis orgánico y funcional así como de programación en productos a medida llave en mano, o incorporados como parte del equipo en las instalaciones del cliente.
Si tienes experiencia en desarrollo para entornos .NET y/o IBM i-Series AS/400 y estás interesado en formar parte de un equipo dinámico y en crecimiento, enviános tu curriculum vitae a empleo@circulodirecto.net y nos pondremos en contacto contigo.
Círculo Directo desarrollo y gestión, S.L.

C/ Dublin, 1
Polígono Industrial Europolis
28232 - Las Rozas (MADRID)
Tel: 902 108 501
Fax: 671 090 925
E-Mail: info@circulodirecto.net
© 2009 Circulo Directo Desarrollo y Gestión, S.L.