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;Una pequeña interfaz de pintado.
namespace BrosPaint
{
public interface IPintable
{
Color CurrentColor { get; set; }
Color ChangeColor(Color newColor);
}
}
using System.Drawing;Implementando una clase genérica, que es vehículo. Luego su clase concreta tractor -Truck-.
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
{
}
}
namespace BrosPaintJugando un poco con el concepto de herencia, representado en la clase coche -Car-
{
public class Car:Vehicle
{
}
}
using System.Drawing;No puede falta el test ...
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);
}
}
}
namespace BrosPaintUn interfaz muy genérica que extrae un elemento de un repositorio, que puede ser una base de datos, un fichero, un servicio web, ...
{
public interface IRepository<t>
{
T Get(T element);
}
}
using NUnit.Framework;Test, que prueba el repositorio, utilizando mockito -moqueándolo-
using Moq;
using BrosPaint;
namespace BrosPaint.Test
{
public class IRepositoryTest
{
[Test]
public void RepositorySimpleTest()
{
var mock = new Mock<irepository<car>>();
var filter = new Car();
var result = new Car();
result.Model = "Ferrari";
mock.Setup(x => 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);
}
}
}
No hay comentarios:
Publicar un comentario