Smart Code Generator…. desde ASP.NET

http://sergiot2.com/blogimages/2008/09Sep/18-writing-code.jpg

Nuevamente en Lima y con nuevo trabajo laburo, curro, tengo que terminar una aplicación que está al 80%, y da mucha lata pereza hacer código tradicional (creación de entidades, de clases de acceso a datos, etc)

Bajo demanda (ósea cuando los necesite), iré revisando los diversos generadores de código existentes.

http://www.smartcodegenerator.com/index_files/image001.gif

Smart Code Generator, es un generador de código a nivel de clases, que tiene como front-end una aplicación Web ASP.NET (VS2005, VS2008). Desde una página Web nosotros podemos generar archivos (Vb, C#), pero en teoría podemos generar cualquier tipo de contenido como Java por ejemplo. Y lo mejor de todo, es que la generación de contenido es a través de plantillas, que son fácilmente personalizables. Como dice su slogan: La generación de código nunca fue tan fácil…

Después de haberlo descargado desde codeplex, e instalado, tendremos disponible un nuevo template en Visual Studio. Desde el explorador de soluciones podemos ver el contenido de la Web, pero hay una carpeta que es clave:

http://sergiot2.com/blogimages/2008/09Sep/18-VSSolution.jpg

Cada archivo dentro de la carpeta Templates es para un archivo específico, podemos tener un plantilla para la clase de entidades por ejemplo, una para clase de acceso a datos y así.

Y en cada template nosotros podemos personalizar el contenido:

http://sergiot2.com/blogimages/2008/09Sep/18-Template.jpg

Una de las cosas interesantes, es que podemos hacer uso de las clases de .Net dentro de la generación de código.

Ejecutamos la página Default.aspx:

http://sergiot2.com/blogimages/2008/09Sep/18-DBSchema.jpg

Como ven, ingresamos una conexión, mostramos las tablas disponibles, y seleccionamos aquellas sobre las cuales queremos generar.

Y nada al generar, crea todos los templates que tengamos por cada tabla (NroTemplates*NroTablasSeleccionas):

http://sergiot2.com/blogimages/2008/09Sep/18-Files.jpg

Y si no lo creen, aquí esta un archivo generado:

http://sergiot2.com/blogimages/2008/09Sep/18-CodeBody.jpg

No es tan completo como el paquete de Acceso a Datos del Web Service Software Factory, que genera los proyectos, procedimientos almacenados, uso de buenas prácticas, entre otras. Pero creo que la gran ventaja es la personalización, es decir si tienes tu propio core o framework de clases, las haces Templates, las copias a este Sitio Web, le dices que tablas vas a usar, y vualá: hecha la magia.

Autor del proyecto: Shahed Khan (MVP), y más features (en inglés) de esta herramienta Smart Code Generator (Asp.Net):

  • All development can be done in VS2005 OR VS2003.
  • Integration with NAnt and Cassini.
  • Extensible Template Generation Engine.
  • Open source Database Schema discovery API for MS SQL, Oracle and MySQL.
  • Uses existing ASP.NET 2.0 website application OR ASP.NET 1.1 web application concepts
  • Generates text based output
  • Fully customisable template-based code generation
  • Remembers custom property data entries

P.D.: La plantilla usada en el ejemplo de arriba no viene por defecto, pero también esta como descarga en los releases del proyecto.

Rock tip: Run as in Windows Vista.

Saludos,

MCTS 70-433: SQL Server 2008 – Manejo de tablas y vistas

http://sergiot2.com/blogimages/2008/09Sep/05_Ladrillos.jpg

Aunque ahora con las herramientas de consultas, como SQL Server Management, se puede hacer cualquier operación con la base de datos, en distintos escenarios vamos a necesitar hacer estas operaciones por queries. Por ejemplo cuando estamos actualizando una versión de base de datos, a de desarrollo a pruebas, o a producción, el modo de hacer un backup y restaurarlo en el otro servidor puede servir al inicio, pero ¿y si la base de datos del otro servidor ya tiene data ingresada? existen varias estrategias para hacer esto, pero la más útil y recomendable por el trabajo que le dado ahora, ha sido generar un archivo actualización con los queries de Update, puede surgir problemas si te olvidas de poner algún query pero ese es otro tema.

Empecemos con el tema…

Tenemos muchas opciones para crear y modificar tablas, usando CREATE TABLE y ALTER TABLE. Al crear una tabla nosotros podemos crear columnas calculadas, que son columnas virtuales ya que no son almacenadas físicamente en las tablas, y si queremos almacenarlas físicamente debemos usar el keyword PERSISTED: Computed Columns. Con SQL Server 2005 se introdujo el concepto de Schemas, que entre una de las funciones principales permite categorizar y agrupar los permisos dentro de una base de datos, en este artículo se explica la necesidad de la creación de Schema en versiones anteriores: Understanding the Difference between Owners and Schemas in SQL Server, ver también CREATE SCHEMA. Recordar que la seguridad es importante siempre, y no después que hemos sido atacados, y siempre tener claro el concepto: “mínimos privilegios”, es decir, si una base de datos tiene distintas aplicaciones que trabajan con ella, y por ejemplo hay una aplicación Web que trabaja con 6 tablas (dentro de un Schema propio), se debería tener un usuario sólo con el permiso a este grupo de tablas, es más si para todas tus modificaciones (CRUD) usas procedimientos almacenados, no deberías permitirle al usuario poder hacer INSERT, UPDATE, o DELETE directamente contra este grupo de tablas, sólo darle permiso de ejecución de los store procedures (CRUD), para modificar los permisos podemos usar GRANT, DENY, REVOKE.

Sobre las Vistas (Views) recuerdo que una mini-charla de rendimiento hace años, recomendaron no usarlas, y bueno hasta ahora no he necesitado hacer uso de las mismas. En este artículo podemos entender las vistas, y en este otro podemos ver que podemos hacer y que no, con las vistas: Diseñando e implementando Vistas. Hay algunas opciones al momento de crear vistas (CREATE VIEW), ENCRYPTION para cifrar el registro en sys.syscomments que contiene la consulta de la creación de la vista, CHECK OPTION y SCHEMABINDING, para mantener la consistencia cuando se van a modificar los datos en una vista.

El tema de índices, debería tener una o varias entradas sólo para hablar de ello. Y el tema de índices no muchas veces se entiende en el primer review, charla, u otra fuente de información, sobre todo si no esta bien explicados, pero si debemos saber que el buen uso de Indexes va a mejorar el rendimiento de los queries y aplicaciones que usen nuestra base de datos, debido a que los índices pueden reducir la cantidad de data que se debe leer para devolver un conjunto de registros. Una tabla o vista puede contener índices clustered, y nonclustered, además existen otras opciones en los tipos de índices disponibles en SQL Server: Filtered Index, Index with Included Columns, Unique Index, entre otros. Dentro de las opciones para optimizar índices, se encuentra el uso de la opción Fill Factor. Cada vez que se ejecuta un query el componente Query Optimizer, es el encargado de determinar la manera más eficiente de ejecutar un query, basado en los famosos planes de ejecución, es bueno conocer como el Query Optimizer, genera las estadísticas para escoger el plan de ejecución más eficiente, nosotros podemos crear estadísticas (CREATE STATISTICS) de las columnas y su comportamiento con los índices, para más información revisar el siguiente artículo: Statistics Used by the Query Optimizer in Microsoft SQL Server 2005. Con respecto al tema indexed views, revisar el siguiente artículo: Improving Performance with SQL Server 2005 Indexed Views.

Si ya pasaron el tema de índices, los constraints son más sencillos, son usados para forzar la integridad de la data, y si revisaron el tema de CREATE TABLE y ALTER TABLE los deben haber visto: PRIMARY KEY (revisar IDENTITY_INSERT para insertar valores predeterminados a un columna Identity), FOREIGN KEY (revisar las opciones de actualización de información), UNIQUE, CHECK.

Los tipos de datos estructurados, son los que veníamos usando desde las primeras versiones de SQL, con SQL Server 2005 se contaba con datos semi-estructurados (Xml). Ahora con SQL Server 2008 tenemos el tipo de datos espacial, y el tipo FileStream, y respecto a estos últimos hay mucha información en los blogs, e internet en general.

Partición de tablas e índices, siempre lo distribuido (cuando se hace bien) tiende a llevar a una alta disponibilidad y escalabilidad. La partición de tablas e índices, permite que la data sea dividida horizontalmente y puede ser colocada en más de un filegroup. Recordar que la partición de tablas e índices sólo esta disponible en las versiones SQL Server Enterprise y SQL Server Developer Edition. Antes de particionar las tablas o índices, debemos crear los siguientes objetos: Partition Function, para especificar como la tabla o los índices serán particionados y Partition Scheme mapea las particiones producidas por una Partition Function para asignarlas a los filefroups definidos. Existen tres diferentes tipos de operaciones con particiones: MERGE, SPLIT, y SWITCH. Por cierto también podemos hacer partición de las vistas.

P.D.: Algunas de las mejoras del SQL Server Management Studio (2008), es el IntellSense para algunos keywords y algunos objetos (todavía no tengo claro el patrón), y algo que se pedía a gritos el agrupamiento de un bloque de código en los queries, ósea como si usaras las llaves de C# y puedes comprimir las líneas visibles de código, para la otra versión espero el #region…#endregion :D.

Saludos,