Los métodos extensores.

Los métodos extensores, nos permiten “extender” la funcionalidad de una clase sin que sea necesario usar herencia o polimorfismo pudiendo añadirle funcionalidad a clases “core” del Framework.

Hay que tener en cuenta, que estos métodos aunque son muy útiles, en ningún caso pueden sustituir a la herencia de clases.

Para crear un método extensor, necesitamos un código tal como el siguiente:

public static string ToMD5(this string str)
{
MD5 md5 = MD5CryptoServiceProvider.Create();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] stream = null;
StringBuilder sb = new StringBuilder();
stream = md5.ComputeHash(encoding.GetBytes(str));
for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
return sb.ToString();
}

Como veis, el metodo extensor, ha de ser estático y ademas, va a recibir siempre como parametro el objeto que lo llama, a este objeto tenemos que añadirle el parametro this.

Así de facil y sencillo. Este tipo de metodos, los había usado con JavaScript y ActionScript, y ahora, mis drugitos, los podemos usar con C#, toda una maravilla.

Bajate el código y échale un ojo, y cuando uses este tipo de metodos, cuidado, ten en cuenta que no estan pensandos para sustituir la funcionalidad que nos proporciona la herencia, y como bien dicen aquí, es interesante agruparlos en un mismo namespace (que en una única clase).

Nunca han sido santos de mi devoción los planetas, aunque desde hace unos días, no paro de escuchar su “corrientes circulares en el tiempo”, canción mucho más madura que la mayoría de sus exitos.

Anuncio publicitario

Linq: Los Operadores OrderBy y OrderByDescending.

Anteriormente ya hablamos de varios operadores de linq y ahora volvemos al tema para ver dos nuevos operadores que seguramente son de los más usados.

Para los que no sepan que es linq, les recomiendo leer ¿Qué es linq?, para los demás sigamos adelante.

En este post, vamos a ver dos operadores y como he dicho seguramente van a ser de los más usados, estos son:

  • OrderBy
  • OrderByDescending

Como su nombre indica, estos operadores, lo que nos van a permitir es ordenar el conjunto de datos de forma ascendente (OrderBy) o descendente (OrderByDescending).

Antes de meternos en faena, decir que vamos a usar como fuente de datos un xml con información sobre países, el mismo que usamos en el post “Operadores de Linq: Como usar los operadores Take, StartsWith, EndsWith y Contains”.  El xml tiene este aspecto: Sigue leyendo

Operadores de Linq: Como usar los operadores Take, StartsWith, EndsWith y Contains

Volvemos a Linq dado que cuanto más lo uso más me gusta  y como ya dije anteriormente Linq seguramente es la mayor mejora que presenta ASP.NET 3.5 y por ello, hoy quería hablar de los operadores que nos aporta el Framework para poder hacer nuestras consultas más precisas.

Los operadores que vamos a ver hoy son:

  • Take
  • StartsWith
  • EndsWith
  • Contains

Estos operadores son equivalentes a operadores de SQL. Estos operadores son

  • Top
  • LIKE

Sigue leyendo

Generando un hash sha1 con ASP.NET y C# de forma sencilla y simple.

SHA1 es un algoritmo criptográfico perteneciente a la familia de algoritmos criptográficos SHA (Secure Hash Algorithm o Algoritmo de Hash Seguro) de la Agencia Nacional de Seguridad de Estados Unidos y desarrollada por el NIST (National Institude of Standards and Technology).

El primero de estos algoritmos fue desarrollado en el año 93 y fue el SHA (ahora conocido como SHA-0), 4 años después, fue sustituido por el SHA1 y posteriormente han aparecido SHA-224, SHA-256, SHA-384 y SHA-512 y todos son conocidos como SHA-2.

En 1998, se encontró una vulnerabilidad en SHA-0 pero esta no afectaba a SHA1 del cual no se ha encontrado ningún ataque efectivo. En 2004, fueron publicados una serie de ataques sobre hash parecidos al que genera SHA-1 planteándose por lo tanto dudas sobre la seguridad que este aporta.

Por medio del SHA1, vamos a obtener un hash sobre un conjunto de datos. Un hash viene a ser un conjunto de datos obtenido en base a otros.

Este tipo de algoritmos, se usa para certificar que una secuencia de datos no ha sido alterada, ya que si se modifica el valor del hash, implica que esa información ha sido alterada.

SHA1 produce una salida de 160 bits de un mensaje que puede tener un tamaño máximo de 264 bits y se basa en principios similares a los usados por Ronald Rivest (del MIT) para desarrollar los algoritmos MD4 y MD5.

¿Cómo podemos obtener un hash mediante el SHA1?

Pues vamos a verlo, la verdad es que con c# es sencillo dado que el Framework (como siempre) nos proporcionan unas clases para realizar esto. Sigue leyendo

Generando un hash MD5 con ASP.NET y C# de forma sencilla y simple.

El MD5 es un algoritmo criptográfico de 128 bits. Fue desarrollado por Ronald Rivest (profesor del MIT) en el año 91 como sucesor del MD4 y pesar de que en el año 96 fue anunciada una colisión de hash planteándose por lo tanto dudas sobre su futuro, a día de hoy es muy usado.

Por medio del MD5, vamos a obtener un hash sobre un conjunto de datos. Un hash viene a ser un conjunto de datos obtenido en base a otros.

Este tipo de algoritmos, se usa para certificar que una secuencia de datos no ha sido alterada, ya que si se modifica el valor del hash, implica que esa información ha cambiado.

El resultado obtenido por medio de un MD5 es una cadena hexadecimal de 32 dígitos.

¿Cómo podemos obtener un hash mediante el MD5?

Pues vamos a verlo, la verdad es que generar un hash MD5 con C# es sencillo dado que el Framework (como siempre) nos proporcionan unas clases para realizar esto. Sigue leyendo

Ejemplo práctico: Creando Unit Test para probar nuestro código

Por norma general los desarrolladores (y por supuesto los testers 😉 ) ocupan mucho tiempo de su jornada para probar el código y asegurarse que la funcionalidad esta implementada correctamente y cumple con la finalidad para la que haya sido diseñada la aplicación.

TDD

Tdd, es la abreviatura de Test Driven Development (Desarrollo Orientado a Pruebas) y es una metodología donde se contempla el ciclo de vida del desarrollo de software de la siguiente forma (y orden):

  • Creación de la pruebas unitarias o unit testing
  • Implementación del código que está probando la prueba
  • Refactoring del código anteriormente implementado

Para que esta metodología funcione, el código tiene que estar lo suficiente estructurado como para poder crear unit test que prueben pequeñas partes de la funcionalidad. Sigue leyendo

El patrón de diseño Singleton

El patrón de diseño Singleton es uno de los más sencillos y utilizados de los que se presentaron en el catalogo de los Gang Of Four (y no es del grupo de lo que hablamos ;-)) y lo que pretende es asegurar que solo exista una instancia de una clase.

El patrón Singleton, se implementa creando un método que cree una instancia de un objeto, solo si esta no está creada. Para asegurar esto, el constructor deberá ser privado.

Este patrón lleva a cabo su propósito por:

  • La clase es la responsable de la creación de la instancia
  • Permite el acceso global a dicha instancia mediante un método de clase.
  • El constructor es privado para que no se instancia directamente.

Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación. Sigue leyendo

Ejemplo practico: Mostrando el horóscopo desde una fuente externa con HttpWebRequest, HttpWebResponse, Linq y Ajax

De un tiempo a esta parte y sobre todo desde que se empezó a hablar de la web 2.0, muchos sitios exponen su información para que se pueda explotar desde diferentes aplicaciones así que en este post vamos a ver cómo obtener información de una fuente de datos externa por medio de la clase HttpWebRequest y HttpWebResponse perteneciente a System.Net, posteriormente la trataremos con Linq To Xml y para finalizar, crearemos una interfaz rica con Ajax.

Para que podamos explotar la info de un sitio web, lo primero que vamos a necesitar es saber qué es lo que vamos a explotar. Nosotros, vamos a usar un XML que expone Terra para mostrar el horóscopo.

Lo primero que vamos a necesitar, es una entidad para ir manejando los datos, a esta entidad, le he llamado HoroscopeInfo, y tiene este aspecto: Sigue leyendo

Ejemplo práctico. Binding de entidades generadas con Linq to Xml a Repeaters.

Gracias a Linq, vamos a poder realizar consultas a fuentes de datos de forma fácil y sencilla obteniendo como resultado tipos anónimos o entidades de negocio generadas por nosotros. En este post vamos a ver un ejemplo de Linq To Xml donde por medio de Linq vamos a obtener una colección que bindaremos a un repeater.

Una vez introducido el post vamos a la faena, primero necesitamos un xml que vamos a cargar con XElement que es una nueva clase perteneciente a System.Xml.Linq que nos permite operar de una forma sencilla con los xmls.

El xml que vamos a usar tiene el siguiente aspecto: Sigue leyendo

¿Que son los tipos anónimos?

Los tipos anónimos, usados junto a Linq nos permiten crear entidades de negocio de forma implicita en el momento de su uso

Un ejemplo de un tipo anónimo sería:

var link = new { Text = "google", Title = "Ir a google", HRef = "http://www.google.com/" };

Enlaces relacionados: