Empezando con Windows Phone 7.1 (y VI) – El Contexto de Datos

En esta primera aplicación, estoy creando un modelo de datos muy sencillo: esencialmente se trata de una colección de lugares de interés para el usuario. Poco más que añadir en esta primera iteración ya que, de momento, no daré soporte anidamientos y no habrá relaciones con otras entidades (al menos no las he identificado todavía). Queda para más adelante anidar lugares dentro de lugares y relacionar lugares con personas.

Para la creación del modelo de datos he comenzado con la entidad principal MiLugar: Se trata de una clase muy sencilla que proporciona dos propiedades. un identificador único y un nombre.

Entidad MiLugar en Iteración 1

Entidad MiLugar en Iteración 1

Caben destacar muy poquitas cosas de la entidad:

  1. Implementa la interfaz INotifyPropertyChanged que es de gran utilidad para comunicar cambios en propiedades de la entidad (una buena forma de que, por ejemplo, una vista sepa que la propiedad que tiene asociada a, digamos por ejemplo, un campo de texto ha cambiado y que, en consecuencia, ha de redibujar dicho campo de texto para mostrar el cambio). Veréis más adelante que esta interfaz está en el corazón de la forma en la que se asocian datos y vistas (llamadlas pantallas, si queréis).
  2. Que la entidad ha sido decorada con el atributo TableAttribute y que ambos campos han sido decorados, a su vez con el atributo ColumnAttribute. De esta manera estamos estableciendo las reglas con las que el contexto de datos podrá crear su implementación física a partir de la definición de mi entidad.
DetalleCodigoMiLugar_Iteracion1

Detalle de la entidad MiLugar en Iteración 1: Atributos Table y Column.

Como veis no tiene gran cosa (el código que veis aquí aun no ha sido probado, así que cruzo los dedos para que no me de ningún susto).

Actualización: Cabe decir que el código reflejado ahí arriba compila, pero no funciona en Windows Phone. ¿La razón? El tipo GUID no existe en SQL Server CE, poned en cambio uniqueidentifier y todo irá como la seda.

El siguiente paso es crear la clase encargada de representar el contexto de datos.

DataContext_Iteracion1

Diagrama de clases para el Contexto de Datos en Iteración 1

En este caso se trata de una clase que implementa el patrón Singleton y hereda de la clase DataContext. La única instancia del contexto de datos se puede obtener a través de la propiedad Instancia y contiene una colección de MiLugar que representamos como una propiedad de la clase Table (LugaresDeInteres).

En general, el contexto de datos tiene como propósito abstraernos de los detalles de acceso de la base de datos, limitándose a proporcionar colecciones (tablas) de entidades y mecanismos para buscar, insertar, editar y borrar elementos de dichas colecciones. En ningún momento nuestro código conocerá una sola línea orientada a abrir, crear, consultar o actualizar una base de datos.

Como podéis ver, el proceso de creación de la instancia de DataContext es bastante sencillo. Se pretende garantizar la concurrencia de hilos (cosa que, en esta aplicación será muy sencillo). A continuación, una implementación típica de Singleton y un pequeño detalle. Si la base de datos no ha sido creada todavía: la creamos mediante la línea _dataContext.CreateDatabase (); Fijaos que la cadena de conexión nos indica que la base de datos se referenciará en nuestro Almacén Aislado (IsolatedStorage)

DetalleInstanciaDataContext_Iteracion1

Detalle de la instanciación del DataContext en Iteración 1

A continuación, vamos a llevarnos el contexto de datos hacia arriba en nuestras capas de aplicación. La idea es utilizarlo en nuestras pantallas y, para eso, vamos a aprovechar la infraestructura que crea Visual Studio 2010 para implementar un patrón de capa de presentación llamado Modelo Vista – Vistamodelo (MVVM: Model view – ViewModel). Probablemente le dedique alguna entrada a este patrón, pero no ahora que todavía no lo tengo demasiado claro. Un par de trazos: los patrones de diseño para la capa de presentación llevan dando vueltas por ahí décadas. En un patrón típico Modelo Vista Presentación tienes lo siguiente:

  1. La Vista: Puedes asemejarla sin problemas a tu pantalla
  2. El Modelo: Los datos que se muestran en la vista.
  3. La Presentación: Lo que junta ambas cosas (definición donde las haya. ¿Eh?)

El MVVM es un patrón específico para Windows Presentation Foundation (WPF) que, os recuerdo, es un superconjunto de Silverlight que es con lo que montáis vuestras pantallas en Windows Phone.

Si no os parece mal, dejaremos la capa de presentación y su asociación con los datos para la siguiente entrada.