La historia de mis desventuras

Palabras más, palabras menos sobre desarrollo de software.

ASP.NET Dynamic Data, un vistazo

Posted by Jhonny López Ramírez en 23 noviembre 2009

Introducción

En medio de las expectativas que ha generado el framework ASP.NET MVC y la disyuntiva que supone frente al tradicional ASP.NET (modelo WebForms), y que hemos discutido ya en otra entrada, ha pasado desapercibido, desde mi punto de vista, el framework ASP.NET Dynamic Data.

¿Qué es? Podemos describirlo escuetamente como un framework que permite construir aplicaciones web funcionales fuertemente orientadas a datos basadas en modelos de datos creados en LINQ to SQL ó Entity Framework. Esto incluye mejoras en la integración entre los tradicionales controles de datos y dichos modelos, en términos de validación de datos y uso de plantillas para representar el CRUD. Para hablar en el contexto de las nuevas tendencias en el desarrollo web: se trata de un poderoso framework de Scaffolding (para quien sea nuevo este término lo podemos resumir como la técnica implementada por diferentes frameworks para, automáticamente, generar la funcionalidad CRUD de una aplicación web basada en una base de datos y metadatos que la describen).

¿Cómo tenerlo?

ASP.NET DD viene incluido en el release Service Pack 1 del Framework de .NET. Para asistir el proceso desde Visual Studio se necesita tener instalada la versión 2008 con SP1. Si se trata de Visual Web Developer Express, se necesita la versión 2008 con SP1.

Primeros pasos

Una vez tengo los prerrequisitos instalados puedo crear mi primera aplicación Dynamic Data. Usaré para esta serie de artículos sobre Dynamic Data un pequeño modelo de datos para una aplicación de Help Desk. Adjunto en esta entrada el script para crear dicho modelo en SQL Server 2005 Express.

Lo primero que debo hacer es crear el nuevo Website escogiendo la plantilla adecuada:

1

Esto generará una solución de tipo Dynamic Data Website. La estructura de archivos de este tipo de soluciones tiene varias particularidades, pero la principal es la creación de la carpeta DynamicData, como se ve en la siguiente imagen:

3

Esta carpeta está compuesta por las subcarpetas:

  • Content, que trae por defecto las imágenes de navegación entre listas paginadas y dos controles de usuario: GridViewPager, con la lógica para recorrer grillas paginadas y FilterUserControl, que se usará para establecer filtros en las páginas de listas de entidades (entidad/List.aspx).
  • FieldTemplates, que contendrá controles de usuario por defecto para la edición de los campos de una entidad.
  • PageTemplates, que contiene las plantillas para las páginas que intervienen en el CRUD de cada entidad: Details, Edit, List, Insert, ListDetails.
  • CustomPages, donde ubicaremos las páginas que creemos con comportamiento diferente al preestablecido para las entidades en las que necesitemos que sea así.

Demos un vistazo a dos de las subcarpetas:

4

 

 

 

 

 

 

 

 

 

Aquí podemos apreciar el contenido por defecto de las carpetas FieldTemplates y PageTemplates. Como decía unas líneas atrás: se trata de las plantillas que se implementarán para cada entidad y sus campos en los diferentes escenarios de uso. Es importante decir que estas plantillas pueden ser modificadas para añadir la funcionalidad a nuestro gusto o necesidad (tema de una futura entrada) por tanto no estamos, necesariamente, obligados a usarlas para nuestro sitio Dynamic Data. Sin embargo, son lo bastante útiles como para usarlas en la mayoría de los casos y sirven también como ejemplo de buenas prácticas de desarrollo. También es importante añadir que contamos con un archivo Site.css en el que podremos personalizar la apariencia del sitio.

Otro elemento de vital importancia para DD en nuestra solución es el archivo Global.asax, puesto que allí se encuentra parte de la lógica usada para el Scaffolding.

Lo siguiente que haremos será general el modelo de datos de la aplicación; en este caso usaremos LINQ to SQL como ORM de la aplicación. Omitiré los pasos para crear el modelo y muestro a continuación el resultado:

2

Una vez tengo el modelo entro a mi archivo Global.asax y busco la línea que registra el contexto de datos y reemplazo el valor YourDataContextType por el nombre del DataContext de mi modelo LINQ to SQL, que en el caso del proyecto de ejemplo es HelpDeskDataContext:

model.RegisterContext
(typeof(HelpDeskDataContext),
new ContextConfiguration()
{ ScaffoldAllTables = true });

Por defecto esta línea de código viene comentada y trae también asignado un valor false para la asignación de ScaffoldAllTables. Yo he habilitado la línea de código y he puesto true a ScaffoldAllTables, esto último para habilitar al framework a que genere la funcionalidad CRUD a todas las tablas del sistema; en caso de no querer hacerlo debería dejar el valor por defecto (false) y proceder a parcializar las clases del modelo a las que deseo generarles la funcionalidad completa anteponiendo a la declaración de la clase el atributo [Scaffold(true)]. Esto lo haremos en una futura entrada. Por ahora y con lo hecho hasta este punto podemos contar con una aplicación web con toda la funcionalidad de acceso a datos, en este caso para la base de datos que nos interesa.

Ejecutaremos la aplicación y nos encontraremos con una página inicial listando las entidades a las que se les hizo Scaffolding. De ahí en más, a explorar cada entidad y la funcionalidad generada. Esta configuración por defecto puede ser modificada.

5

Finalmente decir que el Scaffolding generado presenta problemas a la hora de insertar entidades con llaves primarias autonuméricas en tipos de datos byte y short.

Obtenga la solución de esta entrada aquí.

Obtenga el script de la base de datos de ejemplo aquí.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: