Especificación del formato VHDX v0.95

Microsoft ha liberado recientemente el documento en versión 0.95 de la Especificación del formato VHDX.

Recordemos que el formato VHDX (Virtual Hard Disk Format) corresponde con la virtualización de discos por parte de Microsoft.

El documento escrito en inglés y en formato Microsoft Word tiene un peso de poco más de 450 Kb y puede ser descargado desde este enlace.

Esta nueva versión es posible que esté apareciendo debido a que Microsoft según algunos rumores, estaría trabajando ultimando su Hyper-V v3.0 así como mejoras en los discos duros virtuales (VHDX) que para la próxima versión de Windows, Windows 8, llegarían a soportar hasta 16 Tb.

El documento que indico en esta entrada tiene que ver con la última revisión del formato, y siendo una revisión muy cercana a la versión 1.0, dudo que su contenido varíe extraordinariamente de la futura y definitiva versión 1.0 del documento.

Espero que le sea útil a alguien en el caso de necesitar abrir, conocer o interpretar los discos duros virtuales de Microsoft.

Lo que debes hacer al empezar con Windows Phone

Microsoft ha publicado un documento en formato Microsoft Word de apenas 300 Kb y en inglés, que contiene unas recomendaciones para trabajar de forma inteligente cuando los empleados de una empresa (y usuarios no corporativos) empiezan a utilizar terminales dotados de Windows Phone.

En este documento de apenas 5 páginas, se realizan algunas recomendaciones que debemos seguir.

Entre estas recomendaciones (algunas de ellas realmente básicas), están las de establecer una contraseña de 4 dígitos, la configuración de Microsoft Outlook Mobile para sincronizar el mail, calendario y contactos con Microsoft Exchange, algunas recomendaciones respecto al bloqueo de la pantalla inicial, lo que debemos hacer para localizar un teléfono móvil perdido, lo que debemos hacer para reportar que hemos perdido o nos han robado un terminal, etc.

Podrás acceder a la descarga de este documento en este enlace.

Microsoft Camera Codec Pack v16.3.1483.0410

Introducción

A la hora de ver ficheros RAW con nuestro sistema operativo Windows, es posible que nos encontremos con que el sistema no es capaz de mostrar correctamente la imagen en pantalla.

Indudablemente hay productos en el mercado (sobre todo los de retoque fotográfico como Adobe Photoshop) que sí nos permite llevar a cabo esta tarea, pero existen otros que no.

Microsoft ha creado este pack de codificación precisamente para que podamos combinarlo con Windows Live Photo Gallery y podamos acceder a los ficheros RAW de nuestras cámaras fotográficas.

 

¿Sólo con Windows Live Photo Gallery?

Realmente este paquete no es sólo para Windows Live Photo Gallery, sino también para los paquetes Software basados en WIC (Windows Imaging Codecs).

Es por eso que resulta interesante instalarlo.

 

¿Qué versiones de Microsoft Camera Codec Pack hay?

Existen dos versiones diferentes de Microsoft Camera Codec Pack, la de 64 bits y la de 32 bits.

Y dentro de estas versiones, soporte para diferentes lenguajes o idiomas.

 

¿Qué formatos RAW soporta?

Esta actualización permite visualizar infinidad de formatos RAW.

A continuación indico una tabla/resumen del soporte:

  • Canon:
    Digital Rebel XT, Digital Rebel XTi, EOS 10D, EOS 20D, EOS 30D, EOS 40D, EOS 50D Digital, EOS 300D, EOS 350D, EOS 400D, EOS 450D, EOS 500D, EOS 550D, EOS 1000D, EOS 5D, EOS 5D Mark II, EOS 7D Digital, EOS D30, EOS D60, EOS Digital Rebel, EOS Kiss Digital, EOS Kiss Digital N, EOS Kiss Digital X, EOS Kiss F, EOS Kiss X2, EOS Kiss X3, EOS Kiss X4, EOS Rebel T1i, EOS Rebel T2i, EOS Rebel XS, EOS Rebel XSi, EOS-1D, EOS-1D Mark II, EOS-1D Mark II N, EOS-1D Mark III, EOS-1D Mark IV, EOS-1Ds, EOS-1Ds Mark II, EOS-1Ds Mark III, PowerShot G2, PowerShot G3, PowerShot G5, PowerShot G6, PowerShot G9, PowerShot G10, PowerShot G11, PowerShot Pro1, PowerShot S90, PowerShot S95, PowerShot SX1 IS
  • Nikon:
    Coolpix P6000, D1H, D2H, D2Hs, D2X, D2Xs, D3, D3s, D3X, D40, D40x, D50, D60, D70, D70s, D80, D90, D100, D200, D300, D300s, D700, D3000, D3100, D5000, D7000
  • Sony:
    DSLR-A100, DSLR-A200, DSLR-A230, DSLR-A300, DSLR-A330, DSLR-A350, DSLR-A380, DSLR-A500, DSLR-A550, DSLR-A560, DSLR-A580, DSLR-A700, DSLR-A850, DSLR-A900, Alpha NEX-3, Alpha NEX-5, Alpha NEX-5N, Alpha SLT-A55/A55V, Cyber-shot DSC-R1
  • Olympus:
    C-7070 Wide Zoom, C-8080 Wide Zoom, E-1, E-3, E-10, E-20, E-30, E-420, E-450, E-520, E-620, EVOLT E-300, EVOLT E-330, EVOLT E-400, EVOLT E-410, EVOLT E-500, EVOLT E-510, PEN E-P1
  • Pentax (PEF formats only):
    *ist D, *ist DL, *ist DS, K10D, K20D, K100D, K100D Super, K110D, K200D, K-7, K-x
  • Leica:
    DIGILUX 3, D-LUX 4, M8, M8.2, M9
  • Konica Minolta:
    ALPHA-7 DIGITAL, DiMAGE A1, DiMAGE A2, DYNAX 7D, Maxxum 7D
  • Epson:
    RD1
  • Panasonic:
    Lumix DMC-G1, Lumix DMC-GH1, Lumix DMC-GF1, Lumix DMC-LX3, Lumix DMC-LX5

Descarga

Accederás a este paquete de codificación en este enlace.

Recuerda que el paquete de codificación es gratuito.

Igualmente, podrás descargar Window Live Photo Gallery de este otro enlace.

Validando sin parar. Uso de DataAnnotations

Introducción

Como pasa en muchos casos, el otro día me encontraba haciendo pruebecillas e implementando diferentes procesos de validación en Dtos y entidades.

Al finalizar mis pruebas, el resultado de todo es un conjunto de clases que hacía justo lo que quería respecto a las validaciones.

Decoraba mis clases y/o miembros como deseaba, y en base a esa decoración, ejecutaba el proceso de validación que me permitía obtener qué miembros no habían cumplido esa validación y porqué.

Sin embargo, mientras estaba desarrollando todo esto, me venía a la mente que existía “algo” para hacer si no esto mismo, sí algo muy muy similar. No obstante y ya que estaba metido en el fregado, decidí avanzar por aquello de refrescar/aprender cosas. Cuando acabé me puse a pensar más profundamente y caí en la cuenta de algo que llamaba DataAnnotations o similar.

El caso es que DataAnnotations me habría ahorrado mucho tiempo, así que aquí lo pongo para aquellos que se encuentren en una tesitura parecida y no pierdan el tiempo rehaciendo la rueda como hice yo (si bien nunca viene mal para refrescar/aprender cosas).

En esta entrada, voy a comentaros en qué consiste y como utilizar DataAnnotations en vuestros desarrollos de .NET.

 

¿En qué consiste DataAnnotations?

Básicamente, DataAnnotations nos permite llevar a cabo validaciones de datos de acuerdo a nuestras necesidades. Esas necesidades son decoraciones que indicaremos a los miembros de nuestras entidades y Dtos. Una decoración corresponderá a una validación.

 

¿Qué ensamblado es el que entra en juego con las clases de DataAnnotations?

Para “jugar” con DataAnnotations, deberemos agregar un ensamblado a las referencias de nuestro proyecto. Este ensamblado es System.ComponentModel.DataAnnotations.

 

¿Cómo marcamos el tipo de validación de un miembro?

Para marcar el tipo de validación de un miembro, utilizaremos diferentes atributos.

Estos atributos pueden anidarse de manera que un campo pueda tener más de una validación.

Entre estos atributos encontramos los siguientes:

  • Required: perteneciente a System.ComponentModel.DataAnnotations.RequiredAttribute, marca que el miembro debe tener un campo obligatorio. Esta decoración puede ser utilizada junto a ErrorMessage para indicar un mensaje personalizado de error en el caso de que no se cumpla esta validación.
  • Range: perteneciente a System.ComponentModel.DataAnnotations.RangeAttribute, marca un rango de valores entre los que debe estar comprendido el valor pasado al miembro.
  • StringLength: perteneciente a System.ComponentModel.DataAnnotations.StringLengthAttribute, indica un tamaño del campo string. Esta decoración puede ir en conjunción con MinimunLength para indicar incluso un tamaño mínimo del campo string.
  • RegularExpression: perteneciente a System.ComponentModel.DataAnnotations.RegularExpressionAttribute, indica una expresión regulada que debe ser utilizada para validar el miembro.
  • DataType: perteneciente a System.ComponentModel.DataAnnotations.DataTypeAttribute, indica un nombre de un tipo adicional que debe asociarse a un campo de datos.
  • CustomValidation: perteneciente a System.ComponentModel.DataAnnotations.CustomValidationAttribute, nos permite validar a través de validaciones personalizadas.

 

Vamos con un ejemplo

Y como siempre, la mejor forma de ver esto en funcionamiento es practicar con un ejemplo.

Imaginemos la siguiente situación. Debemos crear un objeto Persona que contendrá diferentes miembros:

  • Id: identificador de la entidad. Campo no requerido.
  • Nombre: nombre de la persona. Campo requerido. Campo de 25 caracteres máximo.
  • Apellido: apellido de la persona. Campo requerido. Campo de 50 caracteres máximo.
  • Dni: número del documento nacional de identidad de la persona. Campo requerido. Campo de más de 1 carácter y de hasta 8 caracteres.
  • Teléfono: número telefónico de la persona. Campo no requerido. Campo de 9 a 13 cifras (aunque vamos a omitir la validación en este ejemplo).
  • Mail: correo electrónico de la persona. Campo no requerido. Validable a través de una expresión regulada que verifica la validez de una cuenta de correo electrónico.

De acuerdo a los datos que tenemos, hemos preparado el código de nuestro objeto Persona de la siguiente manera:

   1: using System.ComponentModel.DataAnnotations;

   2:  

   3:  

   4: public sealed class Persona

   5: {

   6:  

   7:     public int Id { get; set; }

   8:  

   9:     [Required]

  10:     [StringLength(25)]

  11:     public string Nombre { get; set; }

  12:  

  13:     [Required(ErrorMessage = "No te olvides del apellido")]

  14:     [StringLength(50)]

  15:     public string Apellido { get; set; }

  16:  

  17:     [Required]

  18:     [StringLength(8, MinimumLength = 1)]

  19:     public string Dni { get; set; }

  20:  

  21:     public long Telefono { get; set; }

  22:  

  23:     [RegularExpres*ion("expression")]

  24:     public string Mail { get; set; }

  25:  

  26: } // Persona

Nota: “expression” dentro de RegularExpression debe ser reemplazada por la expresión regulada correspondiente. Por alguna razón que desconozco, el sitio me está bloqueando la expresión regulada. La indicaré en los comentarios a esta entrada.

 

Una vez hecho esto, bastará con ejecutar una porción de código que se encargará de realizar las siguientes tareas:

  • Crear la entidad Persona.
  • Llevar a cabo el proceso de validación.
  • En el caso de que existan errores de validación, recorrerlos para procesarlos como deseemos.

El código de ejecución y demostración del funcionamiento de la validación con DataAnnotations quedaría de la siguiente manera:

   1: // Creamos un objeto Persona y le agregamos valores

   2: Persona persona = new Persona();

   3: persona.Nombre = "José";

   4: //persona.Apellido = "López";

   5: persona.Dni = "1112233";

   6: persona.Mail = "joselopez@dominio.com";            

   7: // Proceso de validación.

   8: ValidationContext validationContext = new ValidationContext(persona, null, null);

   9: List<ValidationResult> errors = new List<ValidationResult>();

  10: Validator.TryValidateObject(persona, validationContext, errors, true);

  11: // Si hay errores, los recorremos y los mostramos (versión demo).            

  12: if (errors.Count() > 0)

  13: {

  14:     string errorMessages = string.Empty;

  15:     foreach (var error in errors)

  16:     {

  17:         errorMessages += error.ErrorMessage + Environment.NewLine;

  18:     }

  19:     MessageBox.Show(errorMessages);

  20: }

  21: else

  22: {

  23:     MessageBox.Show("Entidad correcta");

  24: }

En este ejemplo, he querido dejar comentado intencionadamente la asignación de Apellido.

De esta manera, la validación devolverá un mensaje por pantalla parecido a este:

El mensaje corresponde con la validación del campo Apellido y cuyo mensaje en el caso de no pasar la validación, hemos querido personalizar con el texto “No te olvides del apellido”.

Evidentemente, en las otras validaciones tendríamos resultados parecidos.

De hecho, si por ejemplo quitara del correo electrónico el carácter @ tendría el siguiente resultado:

Como podemos observar, las validaciones se producen con muy poco esfuerzo.

 

Extensibilidad a la hora de hacer nuestras propias validaciones

Si quisiéramos extender las validaciones que ofrece .NET y que recoge casi todas las casuísticas, no tendríamos problemas.

Bastaría con crear nuestros propios atributos y heredar de ValidationAtttribute.

 

Como podemos ver, trabajar con DataAnnotations en nuestros desarrollos, puede resultarnos de utilidad y ahorrarnos mucho trabajo, además de aportarnos flexibilidad a la hora de desarrollar nuestras propias validaciones personalizadas.

Microsoft Enterprise Library 5.0.1 Integration Pack para Windows Azure

Información

Microsoft ha publicado la versión 5.0.1 de esta extensión para Microsoft Enterprise Library 5.0 que puede ser utilizada con Windows Azure.

Entre otras características, este paquete incluye el Autoscaling Application Block (Wasabi), el Transient Fault Handling Application Block (Topaz), un proveedor de configuración y un configurador de archivos Blob.

Enlaces

Podrás acceder a la Web de descarga en este enlace.

Para más información sobre Microsoft Enterprise Library 5.0 Integration Pack para Windows Azure, haz clic en este enlace.

Blog con información adicional en este enlace.

Google mueve ficha. Posiciona tus datos en la nube con Google Drive

Introducción

Si hace unas horas conocíamos que SkyDrive se renovaba y permitía usar entre 7 Gb y 25 Gb de datos en la nube sincronizándolos con nuestro PC, hoy conocemos que Google ha sacado a la luz su sistema de datos en la nube, Google Drive.

¿En qué consiste Google Drive?

Al igual que en el caso de Microsoft SkyDrive, Google ha decidido crear diferentes planes de almacenamiento en la nube con sincronización en Google Docs.

Por defecto, un usuario con cuenta GMail tendrá 5 Gb de almacenamiento gratuito.

Adicionalmente, Google indica que la cuenta de GMail ha pasado de 7 Gb a 10 Gb, y el de Picasa posee un tamaño de 1 Gb (al menos en mi caso).

10 Gb de GMail.
5 Gb de Drive (almacenamiento en la nube).
1 Gb de Picasa.

Actualizaciones

Pasar a tener 25 Gb Drive y Picasa viene a costar unos 2.49$ al mes. Como bonificación, la cuenta de correo GMail pasará a tener 25 Gb de espacio.

Si lo que queremos es tener 100 Gb Drive y Picasa, entonces deberemos pagar 4.99 $ al mes, pasando nuestra cuenta de GMail a 25 Gb.

Y así van subiendo las cuotas.

Aquí os dejo una tabla resumen de estos baremos extraídos de la Web de Google.

Suponiendo que los datos de la tabla anterior sean correctos, vemos alguna diferencia con respecto a otros servicios como Dropbox, Microsoft SkyDrive o iCloud de Apple.

Nota: comento lo de que los datos de la tabla sean correctos ya que en la Web de explicación de los servicios, Google no deja claro del todo si GMail posee 10 Gb ó 7 Gb, ya que comenta las dos cosas al hablar de lo mismo. Quiero pensar que es una errata y pasa de 7 Gb a 10 Gb.

Lo que está claro es que la guerra de servicios de almacenamiento en la nube está siendo bastante frenética, lo que posibilita que se ofrezcan mejores servicios y precios a los usuarios que somos al fin y al cabo los que saldremos beneficiados de esta situación.

Cómo trabajar con Google Drive

Lo primero de todo es poner en funcionamiento Google Drive.

Para ello, bastará con pulsar el botón de activación en Google Drive.

No obstante, a la hora de escribir esta entrada, el servicio ha dejado de funcionar tal y como era de esperar. Según se indica en algunos sitios en Internet, los fallos de activación de las cuentas y la demanda de activaciones ha hecho que Google active las cuentas progresivamente.

Es por eso, que tendremos que fijarnos en el botón que aparece en la parte superior de nuestra página Web. Este botón puede indicar "Empieza con 5 GB gratis" o bien, "Notificarme".

Si aparece el segundo botón, deberemos pulsarlo para pasar a una lista de espera en la que Google nos avisará cuando el servicio esté preparado para ser activado. En caso contrario, estaremos de suerte.

Sincronización

Google Drive podrá sincronizar documentos y archivos desde Windows, Mac OS y Android, si bien, es posible que en breve se pueda sincronizar también para iOS, aunque de momento habrá que esperar, algo en lo que otras empresas como Microsoft sí le llevan a Google la delantera.

En Android, podemos localizar la aplicación Google Drive.

Para Windows no he podido localizar aún esta aplicación. Quiero pensar que cuando active el almacenamiento en la nube tendré posibilidad de instalar la aplicación que me permitirá sincronizar los datos en la nube.

Referencias

Para acceder a Google Drive, deberemos hacer clic en el siguiente enlace (recuerda tener una cuenta de GMail).

Reiniciar un Windows Phone 7 con Nokia Lumia 800 sin Hard Reset

Introducción

Quizás no os pase nunca, pero a mí me ha ocurrido y por si os pasa lo mismo y os entra el momento histeria… que quede por aquí escrito por si le sirve a alguien.

Escuchando música MP3 en mi Nokia Lumia 800 mientras trabajaba, de repente el terminal se ha quedado congelado. La pantalla bloqueada con la fecha en la que se quedó frito y sin responder a ninguna de las teclas.

Momento histeria On. ¿Qué hacer?.

Haciendo un Hard Reset (no recomendado inicialmente)

Lo primero en lo que he pensado es en que a lo mejor no quedaba otra que hacer un Hard Reset de mi terminal.

Siempre que he hecho un Hard Reset lo he hecho desde el menú del terminal, pero nunca a través de las teclas.

En teoría existe un método para hacer el Hard Reset a través de una combinación de teclas, pero eso borraría toda la configuración, datos, etc., del terminal, así que si puedo evitarlo mejor.

No obstante y si por necesitas hacer un Hard Reset, lo que debes hacer es lo siguiente (no probado, y si lo pruebas, que sepas que te deja el terminal con los datos de fábrica perdiendo todos los datos guardados en el terminal):

– Presionamos al mismo tiempo el botón de reducir volumen de audio, el botón de la cámara y el botón de encendido/apagado.
– Esperamos a que vibre el terminal, y en ese momento quitamos el dedo del botón de encendido/apagado dejando el resto de dedos pulsados durante unos 10 segundos y finalmente los quitamos.
– El terminal se deberá reiniciar solo.

Reiniciando sin Hard Reset

Ahora bien, hacer el Hard Reset hace que el terminal aparezca vacío, con todos los datos, imágenes, música, configuraciones, etc borrados.

Si no queremos que esto ocurra pero queremos únicamente reiniciar el terminal, bastará con dejar el dedo pulsado en el botón de encendido/apagado durante unos 10 segundos.

El terminal vibrará y se reiniciará sin que perdamos nada.

Si os pasa algo parecido, ya sabéis como actuar.

Skydrive está de cambio Demos la bienvenida al nuevo SkyDrive

Introducción

Levantarse por la mañana y saber que tu cuenta de SkyDrive ha pasado de 25 Gb a 7 Gb no es del gusto de nadie.

Sin embargo, saber que Microsoft ha establecido cambios para que una cuenta que antes tenía 25 Gb y que ahora pasará a 7 Gb no pierda esos 18 Gb de más permitiéndonos recuperarlos, es un alivio.

Tampoco es menos el comprobar que una cuenta que tiene 7 Gb, puede pasar a 25 Gb sin que perdamos dinero… dicho de otro modo, un usuario nuevo que se cree una cuenta sólo podrá tener 7 Gb, y si quiere más, tendrá que pagar.

Actualizando nuestra cuenta de SkyDrive para usar 25 Gb

Siempre y cuando la cuenta de passport con uso de SkyDrive ya estuviera activa con anterioridad, la actualización para usar los 25 Gb que inicialmente teníamos es gratuita y siempre y cuando no se nos pase el tiempo de actualización.

Bastará con acceder a https://skydrive.live.com/ y a través de esta dirección, acceder con nuestra cuenta passport.

Una vez dentro, en la parte superior debería aparecer un hipervínculo que nos invita a hacer clic en él para actualizar nuestra cuenta que ahora tiene 7 Gb, a 25 Gb de forma grauita.

Los nuevos costes de SkyDrive

A modo resumen, los nuevos costes de SkyDrive para Europa son los siguientes:

Para una cuenta creada nueva:

  • SkyDrive gratuito hasta 7 Gb de almacenamiento.
  • SkyDrive + 20 hasta 27 Gb de almacenamiento a 8 €/año.
  • SkyDrive + 50 hasta 57 Gb de almacenamiento a 19 €/año.
  • SkyDrive + 100 hasta 107 Gb de almacenamiento a 37 €/año.

Para una cuenta creada anteriormente y actualizada a 25 Gb:

  • SkyDrive gratuito hasta 25 Gb de almacenamiento.
  • SkyDrive + 20 hasta 45 Gb de almacenamiento a 8 €/año.
  • SkyDrive + 50 hasta 75 Gb de almacenamiento a 19 €/año.
  • SkyDrive + 100 hasta 125 Gb de almacenamiento a 37 €/año.

¿Cómo sincronizar datos entre nuestro PC y SkyDrive?

Microsoft ha hecho pública una herramienta que nos permitirá sincronizar los datos de nuestro ordenador con la nube (SkyDrive).

Esta herramienta podrá ser descargada e instalada en este enlace.

Si has trabajado por ejemplo con Dropbox, te resultará especialmente familiar la nueva forma de trabajar con SkyDrive. De hecho, es la forma normal y natural de trabajo con el escritorio de trabajo, arrastrando y soltando archivos, creando carpetas, etc, con la productividad de un PC.

El único “pero” que algunos ya han comentado en las redes sociales es el hecho de que no podemos hacer clic con el botón derecho del ratón sobre un archivo y obtener la ruta de acceso tal y como ocurre con Dropbox por ejemplo. Es decir, a SkyDrive aún le faltan algunos detalles pero es desde luego un gran paso comparándolo con como debíamos trabajar con SkyDrive antes.

¿Google?, ¿Dropbox?, ¿iCloud?

Microsoft ha dado un importante paso hacia adelante, no sólo igualando las prestaciones de sus competidores, sino incluso mejorando estas.

Si eres de los que les gusta comparar un producto con otro, te invito a visitar el siguiente enlace con la información comparativa entre estos cuatro productos. Podrás acceder a esta información en este enlace.

 

En resumen, los nuevos cambios de SkyDrive son cambios muy notables que beneficiarán a los usuarios. En mi caso he sincronizado a modo de prueba unos 5 Gb de información y no he tenido ningún problema. Te invito y recomiendo a que lo uses.

 

Referencias

Página Web oficial de SkyDrive

Patrón Interfaz Marcadora (II)

Introducción

En la entrada anterior, vimos en qué consistía el Patrón Interfaz Marcadora y cómo usarlo a través de interfaces.

En esta entrada vamos a ver cómo implementar el Patrón Interfaz Marcadora a través de atributos.

 

Implementación del Patrón Interfaz Marcadora con atributos

Lo primero que debemos hacer es crear una clase que actúe como atributo con el cuál decorar una clase con el fin de hacerla del tipo que deseemos.

Por ejemplo:

   1: public class MarcadoraAttribute : System.Attribute

   2: {

   3: } // MarcadoraAttribute

Una vez creado este atributo, crearemos la clase que decoraremos con el atributo que hemos creado para hacerla del tipo que queremos.

   1: [Marcadora]

   2: public class Foo

   3: {

   4: } // Foo

Finalmente tendremos la posibilidad de verificar que una determinada clase, está marcada con el atributo que indica que es de un tipo concreto.

En nuestro caso y para el ejemplo que hemos preparado, quedará de la siguiente manera:

   1: Foo foo = new Foo();

   2: if (foo.GetType().IsDefined(typeof(MarcadoraAttribute), false))

   3: {

   4:     MessageBox.Show("Es marcadora");

   5: }

   6: else

   7: {

   8:     MessageBox.Show("No es marcadora");

   9: }

Espero que esto le sirva a más de uno para conocer cómo funciona y como utilizar este patrón.

Patrón Interfaz Marcadora (I)

Segunda parte de esta entrada: Patrón Interfaz Marcadora (II)

 

Introducción

Uno de los patrones más desconocidos en general y no por ello infrautilizado, es el Patrón de Interfaz Marcadora o Marker Interface Pattern.

En .NET tenemos dos formas de implementar este patrón. En esta primera entrada sobre este patrón veremos una de estas formas.

 

¿Qué es el Patrón Interfaz Marcadora?

Lo primero de todo es entender bien qué es o en qué consiste el Patrón Interfaz Marcadora.

Se trata de un patrón de diseño que puede ser utilizado para proporcionar información marcadora sobre un objeto concreto.

El objetivo de este patrón es el de indicar el comportamiento de la clase que la implementa.

Sin embargo, debe quedar claro para evitar dudas, que una interfaz marcadora es aquella que carece de miembros, es decir, que sirve para marcar. Además de esto, al carecer de miembros, no define ningún contrato que pueda ser implementado.

 

Clases y subclases

Hablando de herencia, debemos tener claro un aspecto que seguramente dominaremos todos a estas alturas. Si tenemos una clase que implementa una interfaz marcadora y una subclase que hereda de esa clase, ésta también arrastrará consigo esa interfaz marcadora. Es algo obvio, pero debemos tenerlo en cuenta.

 

¿Cómo funciona?

Comprenderemos mejor el funcionamiento de este patrón con un ejemplo en código C#.

Para ello, crearemos inicialmente una interfaz vacía como por ejemplo:

   1: public interface IMarcadoraFoo

   2: {

   3: } // IMarcadoraFoo

Luego, tendremos una clase que implementará esta interfaz marcadora, como por ejemplo la clase Foo:

   1: public class Foo : IMarcadoraFoo

   2: {

   3: } // Foo

Si dispongo de un método o función que interactúe de alguna manera con una clase Foo, podré preguntarle si implementa esta interfaz marcadora.

Un ejemplo sencillo de como preguntar si una clase implementa la interfaz marcadora es hacerlo de la siguiente manera:

   1: Foo foo = new Foo();

   2: if (foo is IMarcadoraFoo)

   3: {

   4:     MessageBox.Show("Es marcadora");

   5: }

   6: else

   7: {

   8:     MessageBox.Show("No es marcadora");

   9: }

Como podemos apreciar en el código anterior, hemos verificado que la clase Foo con la que queremos trabajar es una clase que implementa la interfaz marcadora IMarcadoraFoo.

No obstante, existe otra forma más recomendable en .NET de implementar al Patrón Interfaz Marcadora, y es hacerlo con atributos. Esto lo veremos en la próxima entrega.

 

Referencias

Marker Interface Pattern (Wikipedia)

 

Segunda parte de esta entrada: Patrón Interfaz Marcadora (II)