Armando una aplicación usando AjGenesis (Parte 5)

Published on Author lopezLeave a comment

Publiqué un nuevo paso en esta serie de post sobre cómo ir generando una aplicación con AjGenesis. Anteriores posts:

Building An Application Using AjGenesis (Part 1)
Armando una Aplicación usando AjGenesis (Parte 1)
Building An Application Using AjGenesis (Part 2)
Armando una Aplicación usando AjGenesis (Parte 2)
Building an Application Using AjGenesis (Part 3)
Armando una Aplicación usando AjGenesis (Parte 3)
Building an Application Using AjGenesis (Part 4)
Armando una Aplicación usando AjGenesis (Parte 4)
Building an Application Using AjGenesis (Part 5)

El código puede ser bajado desde AppExampleStep05. El ejemplo:

Como en los anteriores ejemplos, necesitamos los últimos binarios de AjGenesis. Podemos bajarlo desde AjGenesisTrunkBinaries.zip. (el código fuente completo está en el repositorio de AjGenesis en Codeplex). Tienen que agregar el directorio bin al path, para ejecutar el ejemplo.

En el directorio raíz, seguimos teniendo los mismos tres comando que en el anterior post.

GenerateCSharp.cmd
GenerateJava.cmd
GenerateVbNet.cmd

El modelo es el mismo. Pero se agregaron los nuevos Tasks/GenerateCSharp.ajg, Tasks/GenerateVbNet.ajg. Ahora, podemos generar una solución .NET y proyecto. Este es el nuevo GenerateCSharp.ajg:

IncludeCode "Utilities/Utilities.ajg"
IncludeCode "Utilities/DotNetUtilities.ajg"
' Create Build Directories
FileManager.CreateDirectory(Project.BuildDirectory)
FileManager.CreateDirectory("${Project.BuildDirectory}")
FileManager.CreateDirectory("${Project.BuildDirectory}/${Project.Name}.Entities")
FileManager.CreateDirectory("${Project.BuildDirectory}/${Project.Name}.Entities/Properties")
Project.Solution = CreateObject()
Project.Solution.Guid = "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"
Project.Solution.WebGuid = "E24C65DC-7377-472B-9ABA-BC803B73C61A"
Project.Solution.Projects = CreateList()
PrjEntities = CreateObject()
PrjEntities.Name = "${Project.Name}.Entities"
PrjEntities.Directory = "${Project.BuildDirectory}/${Project.Name}.Entities"
PrjEntities.Includes = CreateList()
PrjEntities.Projects = CreateList()
PrjEntities.Libraries = CreateList()
PrjEntities.Guid = CreateGuid()
PrjEntities.COMGuid = CreateGuid()
Project.Solution.Projects.Add(PrjEntities)
for each Entity in Project.Model.Entities
  TransformerManager.Transform("Templates/CSharp/EntityClass.tpl", "${Project.BuildDirectory}/${Project.Name}.Entities/${Entity.Name}.cs", Environment)
  PrjEntities.Includes.Add(CreateFileCs("${Entity.Name}"))
end for
for each CsProject in Project.Solution.Projects
  TransformerManager.Transform("Templates/CSharp/CsProject.tpl", "${CsProject.Directory}/${CsProject.Name}.csproj", Environment)
  TransformerManager.Transform("Templates/CSharp/AssemblyInfoCs.tpl", "${CsProject.Directory}/Properties/AssemblyInfo.cs", Environment)
end for
TransformerManager.Transform("Templates/CSharp/Solution.tpl", "${Project.BuildDirectory}/${Project.Name}.sln", Environment)

Muchas cosas nuevas! Pero el punto principal es: ahora, generamos un archivo de solución y un archivo de proyecto. Hay nuevos archivos de funciones utilitarios, y nuevos templates. Notemos la creación del objeto dinámico Project.Solution y de PrjEntities. Ver el CreateObject() y el CreateList() en Utilities/Utilities.ajg.

La solución generada en C#:

Una solución y proyecto es generado para VB.NET, también:

La generación de Java sigue igual que en el anterior post.

Próximos pasos: no generar de nuevo los archivos que no cambiaron, permitir archivos de código manual en los proyectos y mantenerlos luego de una nueva generación; nuevos proyectos (persistencias, interfaz de web, …)

Recuerden: hay otro camino para armar una aplicación, lo comenté en AjGenetizando una aplicación: partir de una aplícación ya armada, y comenzar a abstraer desde ahí, y hasta iterar: generar manual, abstraer, poner en generación automática, mantener lo manual, etc…. En cambio, esta serie de posts pretende ser un tutorial para quien recién se inicia con esta herramienta.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *