Pese a que a muchos de nosotros nos facilitaría la vida en sobremanera, ejecutar todas las acciones de nuestra aplicación web en el lado del servidor no siempre es la mejor opción ni mucho menos la más aconsejable.  ASP.NET nos permite controlar todos los aspectos de nuestra aplicación desde el lado del servidor, pero con el coste añadido de realizar round-trips (ida y venidas) al servidor mediante Postbacks y todo lo que eso implica: tratamiento de la petición y renderización de la respuesta, tiempos de espera, renderización de la página (completa!) en el cliente…

Cierto es que con la llegada de la tecnología AJAX a nuestras vidas, hemos conseguido reducir parte de ese coste (con las peticiones asíncronas y la renderización parcial de página), pero, pese a todo, todavía quedan aspectos en los que la mejor opción sigue siendo ejecutar código en el lado del cliente. El lenguaje más utilizado para programar ése código del lado del cliente es Javascript, por lo que se nos hace necesario orquestrar la comunicación entre ASP.NET en el servidor (incluso si usamos ASP.NET AJAX) y Javascript en el cliente. Leer el resto de esta entrada »

Ya habíamos hablado sobre cómo hacer uso del objeto Cache de ASP.NET para poder guardar en caché aquellos objetos que almacenan datos que requieren de un largo tiempo de procesado para ser obtenidos y que no cambian con demasiada frecuéncia.  Con el uso del objeto Cache, evitábamos tener que volver a recuperar los datos (con todo lo que eso implica: realizar la conexión a la base de datos, realizar la consulta, cerrar la conexión y realizar un tratamiento de los datos si es necesario). Eso repercute en una mejora sustancial en el tiempo de procesado de una petición a un recurso determinado. Pero ¿cómo podemos reducir aún más ese tiempo?  Hasta ahora, guardamos en caché el resultado de consultas a una base de datos, a un archivo o cualquier objeto cuya inicialización u obtención requiere de un tiempo notable de procesado. Ahora bien, eso no quita que se deba llevar a cabo toda la renderización de la página pasando por cada uno de los eventos de ASP.NET (PreInit, Init, Load, PreRender, Render, etc…) para acabar generando el código Html que se envia finalmente al cliente. Si prestamos atención, veremos que el simple hecho de renderizar los controles de servidor (WebControls) a tags Html implica un coste elevado (pero necesario) de tiempo. Necesario si pero ¿siempre?. La respuesta es no. Si analizamos con calma las páginas de nuestro site, nos daremos cuenta de que muchas de ellas son completamente estáticas (siempre muestran el mismo contenido) y que otras disponen de contenidos dinámicos que cambian cada cierto tiempo (pero no de forma contínua, ni por usuario ni nada por el estilo).
Si lo miramos así, sería genial poder guardar en Cache el resultado de la renderización de estás páginas (es decir, Cachear el códgio html que se envia al cliente) evitando así todo el proceso de renderización de la página. Es aquí donde entra en escena la directiva OutputCache.

Leer el resto de esta entrada »

Muchos son los beneficios que se pueden obtener al hacer un uso correcto de la Cache de ASP.NET, pero cierto es que muchos programadores son reticentes a su uso o bien desconocen todas las opciones que ASP.NET nos ofrece con tal de Cachear objetos. Con este artículo pretendo “desmitificar” el uso de la caché de ASP.NET, mostrando ejemplos prácticos de sus diferentes usos. En este primer artículo, nos centraremos en el objeto Cache, mientras que en la segunda parte nos centraremos en la directiva OutputCache. Leer el resto de esta entrada »

Continuando con la temática de patrones de diseño software, hoy me propongo explicar el patrón Decorador.
En ocasiones, durante la etapa de creación del diseño lógico de nuestra aplicación, podemos encontrarnos que necesitamos poder extender la funcionalidad de una clase en tiempo de ejecución.
Tambien podemos encontrarnos en la tesitura de necesitar que cierta funcionalidad pueda ser “asociada” a diferentes componentes. Es en estos contextos donde el patrón Decorador puede salvarnos! Leer el resto de esta entrada »

La mayoría de proyectos en los que nos vemos envueltos implican modificar código existente en vez de escribir código nuevo. En la mayoría de éstas ocasiones modificar dicho código resulta un trabajo tedioso. El principio Open Closed nos ayuda a acometer esta tarea de una forma mucho mas simple (siempre y cuando se siga éste principio a la hora de desarrollar nuestros proyectos).
De forma muy breve, se puede resumir éste principio de la siguiente forma:  las entidades software deben estar abiertas a extensiones, pero cerradas a modificaciones.  Leer el resto de esta entrada »

El patrón alta cohesión se aplica en conjunción con el patrón bajo acoplamiento (en realidad son patrones complementarios que siempre deberían aplicarse conjuntamente). El patrón alta cohesión nos indica que los datos y responsabilidades de una entidad están fuertemente ligados a la misma, en un sentido lógico. En otras palabras, la información que maneja una entidad software debe estar fuertemente ligada a lo que la entidad software representa lógicamente. Pongamos un ejemplo para aclarar el concepto: Leer el resto de esta entrada »

Con éste inicio una serie de artículos dedicados a los patrones de diseño software más útiles, conocidos y comunes.  Empiezo con uno, según mi opinión,  de los más importantes (conjuntamente con el patrón alta cohesión). Ambos patrones nos permiten diseñar aplicaciones en las cuales las responsabilidades están correctamente distribuidas, permitiendo un fácil mantenimiento y extensibilidad del software. Leer el resto de esta entrada »

C# 3.0 incluye una nueva característica llamada expresiones Lambda. Las expresiones lambda son los fundamentos sobre los que se constuye LINQ. Estas provienen del paradigma de programación funcional. En el mundo de la programación funcional, las expresiones lambda son un mecanimos para definir métodos Leer el resto de esta entrada »

La tecnología AJAX nos permite desarrollar aplicaciones web haciendo uso de nuevos diseños (o incluso podríamos decir que paradigmas) complementarios o substitutivos al proceso tradicional de desarrollo de web sites en ASP.NET. Uno de esos métodos de diseño de web sites es el diseño de la interfaz de página única (Single-page interface). 

Leer el resto de esta entrada »

Los métodos parciales son una nueva característica de los lenguajes C# 3.0 y VB.NET 9.0. Los métodos parciales nos permitirán declarar y utilizar métodos sin estar éstos implementados.

Leer el resto de esta entrada »

Varias semanas atrás leí un artículo acerca de cómo desarrollar aplicaciones web más seguras cuando se hace uso de AJAX y el artículo me dio pie a escribir esta entrada, ya que estoy convencido de que para muchos de nosotros desarrollar aplicaciones más seguras es uno de los objetivos principales.

Cuando desarrollamos aplicaciones web, podríamos afirmar que en la mayoría de casos la arquitectura que se acaba implementado es una arquitectura en dos capas (Cliente – Servidor) cómo la que se muestra en la imagen:

 

Arquitectura en dos capas

Arquitectura en dos capas

Leer el resto de esta entrada »

En este artículo se pretende describir que son los friendly assemblies (o ensamblados amigos) y como implementarlos. Este es un concepto que ya existía en la versión VB.NET 2005 (8.0) y en C# 2.0.

El concepto de ensamblado amigo nos indica que un ensamblado podrá compartir sus miembros Friend / Internal con otros ensamblados determinados (es decir, que tenemos que especificar explícitamente). Leer el resto de esta entrada »

La relajación de delegados es otra de las nuevas características del lenguaje VB.NET (9.0) (que ya venía incluida en la versión 2.0 del lenguaje C#). 

Un poco de historia para contextualizar esta característica:

Como todos sabemos, un delegado no es sino un puntero que hace referencia a una dirección de memoria que contiene la firma de un método (y el método en sí). En versiones anteriores (podríamos ir directamente al lenguaje C++ para comprobar esto) la firma del método era fuerte (strong). Leer el resto de esta entrada »

Anonymous types (o tipos anónimos, también llamados projections) es una nueva característica que incorporan las nuevas versiones de los lenguajes C# y VB.NET (3.0 y 9.0 respectivamente). 
Los tipos anónimos nos permiten declarar tipos al momento, sin tener que hacer una declaración explícita (es decir, sin tener que crear una clase).  Los tipos anónimos tienen una mayor utilidad en las expresiones LINQ, ya que estas sentencias muchas veces no se mapean a una entidad lógica concreta y requieren la creación de un nuevo tipo de objetos al momento (on the fly) para poder ser tratadas posteriormente. Leer el resto de esta entrada »

El lanzamiento del .NET Framework 3.5 trae consigo una nueva versión del CLR asi como una nueva versión de VB.NET (9.0 o 2008) y C# (3.0) (éstos son los lenguajes que trato en éste blog).

Una de las nuevas características que incorporan éstos lenguajes es la inferencia de tipos. Para entender este nuevo concepto, creo que es mejor empezar con un ejemplo práctico:

VB.NET:

Partamos del siguiente código

Dim i=new ArrayList()     –> Notar que se ha omitido la especificación del tipo (As XXXX)

Uno espera que el comportamiento del compilador sea tratar la variable i como un
ArrayList, pero si comprobamos con IntelliSense la variable veremos que el
compilador la trata como un Object. Leer el resto de esta entrada »