jueves, 21 de junio de 2012

MVC HtmlHelpers

Estudiano un poco de MVC, y viendo videos de los de TekPub, he descubierto una cosa que me puede ayuar para montar los helpers para css, imágenes o ficheros de jscript.

En el servidor
namespace System.Web.Mvc
{
    public static class HtmlHelpers
    {
        private const string pubDir = "/content";
        private const string cssDir = "css";
        private const string imageDir = "images";
        private const string scriptDir = "javascript";

        public static string CSS(this HtmlHelper htmlHelper, string fileName)
        {
            if(! fileName.EndsWith(".css"))
            {
                fileName += fileName + ".css";
            }
            
            return string.Format("<link rel='stylesheet' type='text/css' href='{0}/{1}/{2}'/>\n",pubDir, cssDir ,fileName);
        }

        public static string JavaScript(this HtmlHelper htmlHelper, string fileName)
        {
            if (!fileName.EndsWith(".js"))
            {
                fileName += fileName + ".js";
            }

            return string.Format("<script type='text/javascript' src='{0}/{1}/{2}' ></script>\n", pubDir, scriptDir, fileName);
        }

        public static string Image(this HtmlHelper htmlHelper, string fileName)
        {
            return string.Format("<img src='{0}/{1}/{2}' />\n", pubDir, imageDir, fileName);
        }
    }

}
En el lado del cliente
        <%= Html.CSS("Site.css")%>
        <%= Html.JavaScript("jquery-1.4.1.js")%>
        <%= Html.JavaScript("colorpicker.js")%>

Una regla de la informática es que no hay que re-inventar la rueda -la otra es si funciona para qué tocar, pero con los test unitarios y demás prácticas ágiles, eso ya está quedando obsoleto-. Por lo tanto he descubierto que ya hay alguien que ha deicado tiempo y esfuerzo a desarrollar interesantes helpers

lunes, 18 de junio de 2012

La Universidad y ser buen desarrollador

Desde hace tiempo voy viendo que gente que es muy buena en la programación, incluso personas que trabajan en Microsoft y no tienen título universitario, pero que son unas máquinas tirando líneas de código.
Me pregunto si de verdad merece la pena pasar por la universidad para ganarse la vida con esto de la programación.
Me he encontrado esto, que es bastante interesante.

viernes, 15 de junio de 2012

Publicar código en el blog

He encontrado una página donde indica cómo publicar código en blogger.
El resultado está bien, aunque perfecto no hay nada.
namespace Test
{
    public class Prueba
    {
          public bool Probando(T historiaDeUsuario){ return true;}
    }
} 

Lo que hay en el html es lo siguiente
 
namespace Test
{
    public class Prueba
    {
          public bool Probando(T historiaDeUsuario){ return true;}
    }
}

jueves, 14 de junio de 2012

Interfaces & Mockito

Poco a poco estoy aprendiendo cómo están programando otras personas.

En el libro Profesisonal ASP.NET Design Patterns -un tocho de más de 1000 páginas, solo me leí los primeros capítulos- explica la importancia de programar con interfaces, de esa manera, el dessarrollo depende del comportamiento y no de la implementación, es menos propenso a errores. Por lo tanto sigue el principio de "fácil extender, difícil de modificar".

He estado jugando con esto de las interfaces, a raíz de este video, además le he añadido Mockito, para hacerlo más divertido. El código es algo muy trivial, de hecho hay un muy buen ejemplo que particularmente me aclaró mucho.

De todas formas voy a poner el pequeño código que he generado.

using System.Drawing;
namespace BrosPaint
{
    public interface IPintable
    {
        Color CurrentColor { get; set; }
        Color ChangeColor(Color newColor);
    }
}
Una pequeña interfaz de pintado.

using System.Drawing;

namespace BrosPaint
{
    public class Vehicle: IPintable
    {
        public Color CurrentColor { get; set; }
        public string Model { get; set; }

        public Color ChangeColor(Color newColor)
        {
            CurrentColor = newColor;
            return newColor;
        }
    }
    public class Truck:Vehicle
    {
    }
}
Implementando una clase genérica, que es vehículo. Luego su clase concreta tractor -Truck-.

namespace BrosPaint
{
    public class Car:Vehicle
    {
    }
}
Jugando un poco con el concepto de herencia, representado en la clase coche -Car-

using System.Drawing;
using NUnit.Framework;
using BrosPaint;

namespace BrosPaint.Test
{
    public class CarTest
    {
        [Test]
        public void PaintCar_Test()
        {
            IPintable item = new Vehicle();
            item.CurrentColor = Color.DimGray;

            item.ChangeColor(Color.DarkViolet);

            Assert.AreEqual(Color.DarkViolet, item.CurrentColor);
        }
    }
}
No puede falta el test ...

namespace BrosPaint
{
    public interface IRepository<t>
    {
         T Get(T element);
    }
}
Un interfaz muy genérica que extrae un elemento de un repositorio, que puede ser una base de datos, un fichero, un servicio web, ...

using NUnit.Framework;
using Moq;
using BrosPaint;

namespace BrosPaint.Test
{
    public class IRepositoryTest
    {
        [Test]
        public void RepositorySimpleTest()
        {
            var mock = new Mock<irepository<car>&gt;();
            var filter = new Car();
            var result = new Car();
            result.Model = "Ferrari";
            mock.Setup(x =&gt; x.Get(It.IsAny<car>())).Returns(result);


            var RepositoryCar = mock.Object;

            Car expectedCar = new Car();
            expectedCar.Model = "Ferrari";
            Car getCar = RepositoryCar.Get(new Car());

            var pp = getCar.Model;
            var ss = expectedCar.Model;

            Assert.IsNotNull(getCar);
            Assert.IsNotNull(expectedCar);
            Assert.IsTrue(expectedCar.Model == getCar.Model);
        }
    }
}
Test, que prueba el repositorio, utilizando mockito -moqueándolo-

jueves, 7 de junio de 2012

Cliente nativo de GitHub para Windows

Desde hace algo de tiempo vengo utilizando github, como repositorio de código. Principalmente lo utilizo para las Katas de programación. Este fin de semana he sacado un rato para subir una Kata, para mi sorpresa me he bajado el cliente nativo para windows. Además está hecho con metro. Se nota que estos tíos son muy buenos.

Un ejemplon de lo dicho.
Cliente nativo de GitHub, para windows














Para más información

Programadores en España

Opiniones sobre la informática-programadores en España.

viernes, 1 de junio de 2012

AutoMapper

Investigando esto del ASP.NET MVC, me encontré con la herramienta AutoMapper. Después ver este video ya he entendido para qué sirve.

Principalmente sirve para crearte los dto´s desde la entidades, para pasar los datos entre capas. Parece que es un proyecto bastante utilizado en este tipo de proyectos.