[Evento] Webcast Comunidades Técnicas-Arquitectura CQRS con Windows Azure Service Bus.

Ayer tuve el placer junto con mi compañero Roberto González de participar en un webcast sobre Técnicas-Arquitectura-Experiencias personales… sobre CQRS con Windows Azure Service Bus y SignalR, donde transformamos en directo la aplicación MVC Music Store. No soy muy fan de los Webcast por el tema de tener que hablar con la pantalla, pero ayer al hacerlo conjuntamente se hizo más ameno y encima nos alargamos 40 min de tiempo. Cosas interesantes que resaltaría de ayer fue el uso de Visual Studio Anywhere ¿No  lo conoces? Corre insensato y descargalo!!! que gracias a Luis Fraile por el soporte que nos dió durante el evento montamos un experimento bastante interesante, ya que al ser dos ponentes teníamos que escribir código conjuntamente desde cada uno de nuestro equipos (Pair programming) y solo uno tenía la pantalla compartida. Además compartimos código con los asistente para que lo tuvieran online en su Visual Studio y pudieran seguir también el código en real.

Otra cosa que me gustaría resaltar y que quede muy claro: Es una demo!!!

Cosas que se quedaron en el tintero

Asincronía

Los CommandHandler se estaban ejecutando de manera síncrona:

namespace MvcMusicStore.CQRS.Core

{

    public interface ICommandHandler<T> where T : ICommand

    {

        void Execute(T command);

    }

}

Lo suyo sería aprovecharse de las ventajas de async/await que nos brinda el framework y hacerlos asíncronos para que nuestro servidor escale aún más, y más aún cuando la nueva versión de Entity Framework también lo soporta.

El CommandHandler quedaría algo como así:

namespace MvcMusicStore.CQRS.Core

{

    public interface ICommandHandler<T> where T : ICommand

    {

        Task ExecuteAsync(T command);

    }

}

Y nuestro controlador quedaría así:

[HttpPost]

public async Task<ActionResult> AddressAndPayment(FormCollection values)

{

    var order = new Order();

    TryUpdateModel(order);

 

    try

    {

        if (string.Equals(values["PromoCode"], PromoCode,

            StringComparison.OrdinalIgnoreCase) == false)

        {

            return View(order);

        }

 

        await _bus.SendAsync(

            new AddressAndPaymentCommand()

            {

                UserName = User.Identity.Name,

                OrderInfo = order   

            });

 

        return RedirectToAction("Complete");

    }

    catch

    {

        return View(order);

    }

}

Es importante que los métodos asíncronos tenminen con la palabra Async 😉

La presentación

 

El código

https://github.com/lurumad/mvc-musicstore-cqrs.git

Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *