viernes, 24 de agosto de 2007

Generadores de Codigo

Un generador de código permite agilizar el desarrollo de aplicaciones, yo lo estoy utilizando con un proyecto pequeño para ver que resultados obtengo.
Hasta ahora he logrado ahorrar tiempo y a la vez programar dentro de todo algo prolijo, es una buena forma de no caer en la típica programación con toda la logica pegada a la interfaz al estilo VB6 cuando necesitas hacer algo rápido. Asi queda algo elegante sin que ello nos involucre horas y horas de programar capas.
La aplicación que utilice para hacer esto se llama MyGeneration esta aplicación permite utilizar distintos templates que escriben código, vos podes armar el tuyo o usar alguno de los que ofrece entre ellos dOOdads y NHibernate, el último es muy conocido en el mundo de java.
Yo opte por probar con dOOdads, que por medio de una jerarquia de herencia te permite crear clases que mapean contra las tablas de tu base de datos para que después puedas usarlas de esta forma:

// Load and Save
Employees emps = new Employees();
if(emps.LoadByPrimaryKey(42))
{
emps.LastName
= "Just Got Married";
emps.Save();
}

// Add a new record
Employees emps = new Employees();
emps.AddNew();
emps.FirstName
= "Mr.";
emps.LastName
= "dOOdad";
emps.Save();



// After save the identity column is already here for me.
int i = emps.EmployeeID;
Les comento a grandes rasgos los pasos que hay que hacer para que salga andando:
1) bajar MyGenerator desde sourcefoge que es donde esta la última version del generador y del template.(acá el link http://sourceforge.net/projects/mygeneration )
2) Una vez instalado el programa necesitaras tener una base de datos bonita y lista para mapear hacia objetos.
3) La arquitectura de oddododos (o como se escriba) tiene los siguientes modulos:
a- un proyecto que tiene las clases bases que van a implementarse luego por el generador de código
b- los procedimientos almacenados que utilizan las clases para guardarse en la base de datos
c- un conjunto de vistas en la base de datos que debes crear para utilizar datos relacionados de forma eficiente.
4) Entonces para que esto ande primero tenemos que agregar a nuestro proyecto el proyecto de arquitectura de dOOdads, el mismo se encuentra en C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp para la version C#.
5) Una vez que elegimos cual es la base de datos a usar tenemos que marcar la clases de la carpeta C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp\MyGeneration.dOOdads\DbAdapters que vamos a usar (ver los prefijos) para que compilen. Para ello la seleccionamos y en el cuadro de propiedades la maracamos para incluirla en el build.

En la imagen muestro las dos clases que abría que cambiar la propiedad "Build Action" para que compile un proyecto con base de datos SQL Server 2000 o 2005.

6) una vez que tenemos el proyecto referenciado, vamos a generar nuestras clases de negocio. Para ello iniciamos mygeneration configuramos la cadena de conexión hacia la base de datos que vamos a mapear y procedemos a buscar en el arbol de la izquierda los templates a usar.

7) para crear las clases de negocios usamos el template dOOdads Business Entity que se encuentra bajo la rama c# de dOOdas. Este template les genera clases abstractas, si quieren las concretas también hay que hacerlo con el mismo método.
La idea de las clases concretas bobas es que ahí metamos el código especifico de nuestras aplicaciones.
Si van a usar vistas para obtener datos relacionados con joins también se generan desde ese apartado.
8) Tambien necesitamos crear los procedimientos almacenados para eso elegimos la base de datos correspondiente en el arbol de template (por ejemplo Microsoft SQL Server) y corremos el template de dOOdad Stored Procedures. Esto escupe un monton de stores por cada tabla que son necesarios para correr las clases generadas por MyGeneration.
Aca esta bueno tocarlos un poco para que hagan lo que nosotros querramos, por ejemplo en mi caso modifique los deletes para que no borren sino que marquen un campo de baja, y toque también el procedimiento que trae todo para que solo traíga aquellos que no estan marcados como borrados.
TIP: si a cada columna le agregan un campo RowVersion de tipo timestamp, el template va a utilizarla para manejar la concurrencia de los updates y puede llegar a generarles una sentencia TSEQUAL que no compila en 2005, no se hagan drama cambienlo por un igual y sale con frítas.
9) Agregamos todo el código generado a nuestra solución de C#
10) Configuramos TransactionMgr para que obtenga una query string válida para nuestro aplicativo en la fúncion private IDbConnection CreateSqlConnection(BusinessEntity entity), donde pueden traerla directamente del app.config o web.config.

Y con eso ya tendríamos andando una elegante capa de datos completa en no mas de 30 minutos.
Cualquier cosa no duden en preguntar... en la página de mygeneration hay un pdf de 6 paginas que dice básicamente lo mismo que acá y esta práctico para ver como usar bien toda la interfaz que te da.
Por ejemplo tiene un generador dinámico de querys muy piola.

Eso es todo por ahora hasta la próxima espero que le sea útil a alguien....

jueves, 16 de agosto de 2007

Donde hostear tu codigo de fuente parte II

Luego de charlar con el resto del team de la tesis, llegamos a la conclusión de que el ganador para hostear nuestra tesis es: Google Code.

El principal motivo que hizo inclinar la balanza hacia google fue que necesitamos un servicio que sea principalmente confiable, es decir que no nos deje a pata. Y si algo tiene google es performance y disponibilidad.

Por ahora fuera de esa ventaja no he encontrado nada más. Es mas me resulta difícil usar la interfaz que trae y no puedo encontrar manera de borrar cosas como documentos que subís o simplemente administrar el issue tracker una vez que cargaste un issue de prueba.

Supongo que de a poco le voy a ir agarrando la mano.

De todas formas no dejo a www.assembla.com de lado, y a este último lo voy a probar con proyecto comerciales pequeños que tengo dando vuelta. Y como solo son de 1 developer no tengo grandes riesgos al perder información, al tiempo que pongo a prueba ese potente servicio.

viernes, 10 de agosto de 2007

¿donde hostear tu código de fuente?

Donde hostear, hospedar, guardar o gestionar tu código de fuente para trabajar de manera distribuida y organizada? en un repositorio claro....

Bueno,, esa pregunta puede tener una una respuesta rápida instalarte en tu casa un servidorcito svn o cvs y salís andando....

Un repositorio es un lugar donde guardar archivos de manera organizada, la ventaja de estos sistemas antes mencionados es que guardan la historia de cada archivo. De esta manera podes ver como va evolucionando los cambios y gestionarlos.

Aparentemente instalar tu servidor en casa para proyectos de la facu o personales, funciona pero para corto plazo. Al menos así lo marca mi experiencia, ya que a la larga al ser una pc de uso diario no siempre estará encendida y lo que más se sufre es la falta de un buen upload para poder manipular el repositorio de manera fácil y rápida.

Buscando alternativas me tope con 4, de los cuales 1 solo de estos no te obliga a que abras el código, es decir no obliga que tu proyecto sea Open Source. Las alternativas que obligan a que sea open son:
1) Google Code

Ventajas: la velocidad de sus servidores, te ofrece SVN que es una herramienta muy práctica para versionado. Otra ventaja es el botón para borrar proyecto, por lo que si algún día quieres que ya no este disponible le das click y vuala desparece.... ahora no se si andará esta función pero de que esta esta....

Desventajas: aparentemente tienes una cuota de 100 mb para laburar, pero según leí en varios lugares puedes extenderla una vez que sea necesaria.


2) CodePlex

Esta es la versión Microsoft de GoogleCode, las ventajas vienen de la mano de microsoft y su Team Foundation Server (que aparentemente puedes una parte si usas su servicio de hosting).
En cuanto al espacio requerido no dice demasiado, por lo que no puedo compararlo. Tampoco encontré un botón para borrar el proyecto por lo que supongo que el mismo quedaría siempre en el sitio.
También si o si te obliga a que tu proyecto sea open source.


3) SourceForge.net

Este es un clásico del open source, te ofrece svn y cvs pero tiene que pasar por un tramite para poder crear un nuevo proyecto. No he podido ver mas nada de este, pero no podía dejar de nombrarlo ya que hospeda mucho de los programas mas exitosos Open Source de la actualidad.

4) Assembla

Assembla me pareció muy buen producto, no te obliga a que sea abierto (es decir que puedes tener tu código para tu team solamente) y ofrece varias herramientas de tracking y managment.
tiene una plantilla de scrum que me parece practica y sencilla, y otras tools mas para la administración de proyectos, trackeo de tickets, etc.
La versión gratis se encuentra limitada a 200 mb por proyecto, y siempre esta la alternativa de pagar una suma en dolares para tener más espacio y servicios (que para la gente de acá se vuelve imposible).
Podes borrar el proyecto fácilmente algo que es útil para sacar de la nube de internet tu código si así lo deseas.
El punto en contra que le encontré es que no esta apoyada por una gran organización ni es muy conocida. Por lo que poner tu código de fuente allí y no estar pagando nada puede ser un riesgo, si la empresa desaparece.

Bueno voy a seguir analizando que alternativa conviene más, ya que sin duda es una herramienta indispensable para poder confeccionar una tesis de ingeniería y coordinar los cambios de código (que al fin y al cabo es lo que busco hacer).

Más adelante les comento que alternativa resulto la ganadora.