Consejos para freelance en desarrollo de software

Consejos para freelance en desarrollo de software

  • Si hablamos bien, si escribimos mejor
  • ¿Como sabemos cuanto cobrar?
  • ¿Y las pruebas que?
  • Los cambios cuestan

Publicado por Sorey Garcia
«Los que me conocen saben de mi amor por las mejores prácticas de Ingeniería de Software, pero la vida es la vida, y lo ideal es lo ideal, y la teoría es bonita, pero no aplica en todos los ámbitos…»

http://blog.soreygarcia.me/2012/03/consejos-para-freelance-en-construccion.html

Que es inyección de dependencias (DI)

La inyección de dependencias es un patrón de diseño orientado a objetos en el que se pasan las referencias necesarias a una clase en lugar que esta se encargue de crearlas.

Vamos a ver un ejemplo sin DI:

public class OrderService
{
    private OrderRepository repository;
    public OrderService()
    {
        repository = new OrderRepository();
    }
}

Se puede observar que dentro del constructor de OrderService estamos instanciando el repositorio.

Y ahora con DI:

 
public class OrderService 
{
 private OrderRepository repository; 
public OrderService(OrderRepository repo) 
{ 
repository = repo; 
} 
}

Vemos que ahora el repositorio es inyectado en el constructor, es la forma mas habitual para hacer inyección de dependencias, se pueden utilizar otras estrategias como: inyectar en métodos o propiedades.

Mejora
Si seguimos la D de SOLID, que indica: los módulos de alto nivel no deben depender de módulos de bajo nivel, sino de sus abstracciones. Seria ideal definir una interfaz para el repositorio y en lugar de inyectar OrderRepository, indicáramos la interfaz IOrderRepository.

Estrategias para inyectar dependencias

• Inyección por constructor (Constructor injection)

Se pasan las referencias en el constructor del objeto. Este es el use mas habitual.

public class OrderService
{
    private IOrderRepository repository;
    public OrderService(IOrderRepository repo)
    {
        repository = repo;
    }
}

• Inyección por propiedad (Property injection o setter injection)

Se crea una propiedad para asignar una dependencia.

public class OrderService
{
    private IOrderRepository OrderRepository { get; set; }
}

• Inyección por parámetro (Parameter injection)

Se agrega un parámetro en la firma de un método por cada dependencia que se necesite.

public class OrderService
{
    private int GetOrderId(IOrderRepository repo)
    {
        // Código
    }
}