He estado leyendo recientemente sobre DI y IoC en C++. Estoy un poco confundido (incluso después de leer preguntas relacionadas aquí en SO) y esperaba alguna aclaración.¿Cuál es la diferencia entre la inversión de control y la inyección de dependencia en C++?
Me parece que estar familiarizado con el STL y Boost conduce al uso de la inyección de dependencia bastante. Por ejemplo, digamos que hice una función que se encuentra la media de una serie de números:
template <typename Iter>
double mean(Iter first, Iter last)
{
double sum = 0;
size_t number = 0;
while (first != last)
{
sum += *(first++);
++number;
}
return sum/number;
};
Es éste (es decir, el uso de iteradores en lugar de acceder a la colección en sí) de inyección de dependencia? ¿Inversión de control? ¿Ninguno?
Veamos otro ejemplo. Tenemos una clase:
class Dice
{
public:
typedef boost::mt19937 Engine;
Dice(int num_dice, Engine& rng) : n_(num_dice), eng_(rng) {}
int roll()
{
int sum = 0;
for (int i = 0; i < num_dice; ++i)
sum += boost::uniform_int<>(1,6)(eng_);
return sum;
}
private:
Engine& eng_;
int n_;
};
Esto parece una inyección de dependencia. Pero, ¿es inversión de control?
Además, si me falta algo, ¿alguien puede ayudarme? Esta parece ser la forma natural de hacer las cosas, así que si eso es todo lo que hay para Dependency Injection, ¿por qué las personas tienen dificultades para usarlo?
¿Has leído la wiki? Tiene una definición muy clara de IoC/DI http://en.wikipedia.org/wiki/Inversion_of_control – CDSO1
En C++, no hacemos IoC o DI, tenemos nuestros propios conceptos pretenciosos y mal nombrados. –
Su función de plantilla podría dividirse por cero si no tiene cuidado. –