19 marzo de 2009
Para celebrar el día de padre, hoy han publicado la versión final de ASP.NET MVC 1.0.

No existen grandes mejoras respecto versión ASP.NET MVC Release Candidate 2, excepto quizá la actualización de jQuery a la versión 1.3.2.

Cuidado si utilizas alguno de estos plugins porque pueden dar problemas:

  • PowerCommands - Este lo usaba yo y he tenido que desinstalarlo.
  • Clone Detective
  • Azure Tools
Han publicado un hotfix que puede solucionarlo:

Escribe:   Richard Chamorro
Etiquetas:
21 enero de 2009

Una de las limitaciones de la plataforma .Net, es la ausencia de la herencia múltiple, es decir, que podamos heredar de dos clases diferentes al mismo tiempo. En ocasiones esta característica, presente en otros lenguajes como C++ nos podría ser muy útil, aunque es cierto que también presentaría otros problemas, entre los más importantes la complejidad y la ambigüedad que puede generar.

En C# podemos implementar múltiples interfaces, pero no nos resuelve el problema de repetir código y funcionalidades comunes si ya estamos heredando de una clase.

Los Extensión Methods, una nueva característica desde la versión 3.0, nos permiten simular la herencia múltiple.

Pongamos que tenemos dos clases que ya heredan de otra, y que por tanto no pueden heredar de más clases. Pero sí que podemos hacer que implementen una interfaz, e implementar los métodos comunes que deseamos como un “Extension Method” de esta inferfaz.

Veamos un ejemplo:

 
Escribe:   Josep Planells
Etiquetas:
19 enero de 2009

Hoy me he pasado un buen rato intentando averiguar cómocomprobar que un método “mockeado” con Rhino Mocks se llamaba un número determinado de veces.

Primero creamos el “mock” del objeto que queremos probar:

IMailServiceemailService = MockRepository.GenerateMock<IMailService>();

Ya podemos realizar la prueba, por ejemplo con un controller de MVC al que le pasamos este objeto en el constructor y que cuando se realizauna determinada acción, debe llamar internamente a un método del objeto “mockeado”.

TestController invitations =...

Escribe:   Richard Chamorro
26 noviembre de 2008
En el posts anteriores ya vimos cómo utilizar y configurar StructureMap para poner en práctica la inyección de dependencias.

Tal y como prometí, ahora vamos a ver un pequeño ejemplo de cómo utilizar el StructureMap y el mocking de objetos en las pruebas unitarias.

Quizá te preguntes que es un “Mock”.

Un mock, en el contexto de pruebas unitarias, es un objeto “falso” que simula el comportamiento del objeto real, con el fin de realizar las pruebas. En la wikipedia lo asimilan al maniquí que utilizan los diseñadores coches para realizar las pruebas de accidentes.

Te sugiero si utilizas pruebas unitarias, profundices más sobre este tema.
Existen muchas librerías para realizar mocks en .NET.
Escribe:   Richard Chamorro
26 noviembre de 2008
Uno de los objetivos que debe tener un buen programador es que su código esté poco acoplado, es decir, que dos componentes con funcionalidades distintas dependan el uno del otro lo mínimo posible. De esta forma conseguirá que sus dos componentes por separado sean reutilizables y más fáciles de mantener.

Para eliminar al máximo la dependencia entre componentes, existe un patrón de diseño conocido como “Inyección de dependencias” (“Dependency Injection” o DI).  Este patrón consiste básicamente en que en vez de ser una clase la que crea objetos, estos se inyectan o resuelven en el último momento.

Existen diferentes proyectos en .NET que intentan ayudarnos  a aplicar este patrón:
Escribe:   Richard Chamorro
06 octubre de 2008
Esto de jQuery es divertido. Igual de divertido que javascript pero más fácil.

Hace unos días di una primero introducción a jQuery e hice mi primer plugin que llamé macEmulator.

Ahora presento un nuevo plugin que responde a una necesidad real y casi diaria de todo programador en ASP.NET (a no ser que trabaje con MVC).

Se trata de emular el FindControl de ASP.NET pero con javascript. Vayamos a un ejemplo:

Tenemos un DataList con un ItemTemplate que tiene dos Panels y un Label en cada Panel

<asp:DataList ID="DataList1" runat="server">
    <ItemTemplate>
        <asp:Panel ID="Panel1" runat="server">
            <asp:Label...
Escribe:   Xavi Navarro
29 septiembre de 2008

Cuando hoy he leído el último artículo de Scott Guthrie - Scottgu para los amigos –‘jQuery and Microsoft’, me he quedado alucinado.

La noticia en sí es muy buena: van a comenzar a distribuir jQuery, mi librería Javascript favorita, junto con Visual Studio. No sólo eso. Además darán soporte nativo de ‘Intellisense’ en su editor, crearán controles para AJAX Control Toolkit, la integrarán con ASP.NET MVC y contribuirán con pruebas, corrección de errores y parches.

Nosotros ya estamos usando jQuery en nuestros nuevos proyectos, y los diseñadores de Avanzis ya han comenzado a utilizarlo cuando necesitan realizar efectos avanzados con Javascript.

Las principales ventajas de jQuery son:

  • No es intrusivo.
    Esto significa que no se mezcla el código HTML con Javascript, con lo que se consigue un código más limpio y fácil de mantener.
  • Simplifica las tareas habituales de Javascript.
    Seleccionar un...
Escribe:   Richard Chamorro
29 agosto de 2008
!Acaban de lanzar la preview 5 de ASP.NET MVC en Codeplex!

Si eres de los valientes (como nosotros) que estas desarrollando con ASP.NET MVC, recuerda que tendrás que desinstalar la versión anterior antes de instalar este nuevo lanzamiento.

Por si nos os apetece leer, y ya que tengo que revisar los cambios en profundidad, aquí tenéis  algunas de las nuevas características respecto a la Preview 4:

  • Mejoras en los motores de visualización (ViewEngine)
    • Ahora, en vez de ser cada controlador el responsable de decidir que motor de visualización se utilizará, los motores se registran de forma global.
    • Se ha modificado la interfaz IViewEngine para que añada el método "RenderPartial".
  • Mejoras en los helpers
    • Soporte para la renderización de views parciales.
    • Nuevo parámetro para poder indicar a un DropDownList cuál será su opción por defecto.
    • Se han...
Escribe:   Richard Chamorro
Etiquetas:
23 julio de 2008
Siguiendo la serie de artículos sobre Lucene (Lucene para ASP.NET (Parte I). Introducción y Lucene para ASP.NET (Parte II). Indexación), dónde conocimos qué era Lucene y cómo indexar contenidos, durante este artículo vamos a hablar de la búsqueda, sin duda, el objetivo último que perseguimos.

Según la estructura del Document planteada en el artículo sobre Indexación, cuando queramos buscar algo atacaremos a los campos "Title" y "Text", pues son los que contendrán la información importante. Es decir, lo que queremos es "buscar palabras que se encuentran en el título o en el texto".

A continuación tenemos un método que busca en ambos campos y devuelve un listado de Document's:

public static List<Document> SearchDocuments(string sQuery)
{
Escribe:   Xavi Navarro
Etiquetas:
10 julio de 2008
!Firefox me encanta!

Firefox es mi navegador favorito para navegar por Internet por su velocidad y simplicidad, pero sobre todo gracias a extensiones como Firebug que son imprescindibles para cualquier desarrollador web.

Me gustaría utilizar este navegador para realizar las pruebas de las aplicaciones en ASP.NET, pero por algún motivo Firefox se muestra extremadamente lento cuando se conecta a las páginas del ordenador local (localhost). ¡Pero esta mañana he leído la solución a ese problema!

Básicamente, consiste en entrar en la configuración avanzada de Firefox, introduciendo about:config en la URL del navegador, y cambiar el parámetro 'network.dns.ipv4OnlyDomains' a 'localhost'.

Pruébalo, y notarás la diferencia.
Escribe:   Richard Chamorro
Etiquetas:
04 julio de 2008
Tras hablar de buscadores avanzados para Webs e introducir Lucene para ASP.NET, a lo largo de este artículo hablaremos de cómo hacer la indexación con Lucene.

Distinguimos tres pasos básicos cuando hacemos la indexación:
  1. Abrir el índice.
  2. Crear y añadir el Document (del que ya hablamos en el anterior artículo).
  3. Optimizar el índice.

Abrir el índice

Lo primero un ejemplo de cómo se abre un índice:

IndexWriter writer = new IndexWriter(IndexPath, new SpanishAnalyzer(), !Directory.Exists(IndexPath)); 

El constructor de "IndexWriter" consta de tres parámetros:
    ...
Escribe:   Xavi Navarro
11 junio de 2008
Una de las nuevas características de c# 3.0 es la posibilidad de inicializar objetos complejos en el momento que se declaran.

Por ejemplo:

class Coche
{
   public string Marca { get; set; }
   public stirng Modelo { get; set; }
}

Podemos declararlo indicando ya sus propiedades:

Coche c = new Coche {Marca = "Ford", Modelo = "Focus"};

También puedes utilizar esta característica para añadir elementos a una colección en el momento de declararla:

List<Coche> coches = new List<Coche>() {
   new Coche {Marca = "Ford", Modelo="Focus"},
   new Coche {Marca = "Seat", Modelo="Panda"}
}

Lo que no tenía claro hasta ahora es cómo inicializar diccionarios y hoy me ha hecho falta en el proyecto que estoy desarrollando utilizando ASP.NET MVC.

En concreto necesitaba un diccionario de tipo IDictionary<string, object> donde indicarle las propiedades html de un textbox. Este es el...
Escribe:   Richard Chamorro
Etiquetas:
02 junio de 2008
Uno de nuestros principales proyectos es el gestor de contenidos Avanzis Webportal. Y en un proyecto de estas características, el editor HTML es una parte fundamental.

Hasta ahora hemos utilizado el FreeTextBox, que se ha quedado un tanto obsoleto en el entorno tecnológico actual. Por ejemplo, no soporta estar dentro de un UpdatePanel de AJAX.

Por ello, mi compañero Javi y yo, nos hemos dedicado estas últimas semanas a analizar los editores existentes para decidir cual vamos a utilizar a partir de ahora. En la primera ronda, descartamos el FCKEditor y el TinyMC, a pesar de ser proyectos open source, por la falta de soporte extenso para ASP.net y de algunas funcionalidades importantes. Así que pasamos a estudiar y a probar más a fondo el de
Escribe:   Josep Planells
Etiquetas: