J'entends tout le temps les gens parler de l'injection de dépendances et de ses avantages, mais je ne les comprends pas vraiment.
Je me demande s'il s'agit d'une solution au problème du "je passe tout le temps les connexions aux bases de données comme arguments".
J'ai essayé de lire l'article de wikipedia à ce sujet, mais l'exemple est écrit en Java et je ne comprends pas bien la différence qu'il essaie de faire comprendre. ( http://en.wikipedia.org/wiki/Dependency_injection ).
J'ai lu cet article de dependency-injection-in-php ( http://www.potstuck.com/2009/01/08/php-dependency-injection/ ), et il semble que l'objectif ne soit pas de passer les dépendances à un objet directement, mais de boucler la création d'un objet avec la création de ses dépendances. Je ne suis pas sûr de savoir comment appliquer cela dans un contexte d'utilisation des fonctions php, cependant.
De plus, est-ce que ce qui suit est de l'injection de dépendances, et est-ce que je devrais me donner la peine d'essayer de faire de l'injection de dépendances dans un contexte fonctionnel ?
Version 1 : (le genre de code que je crée, mais que je n'aime pas, tous les jours)
function get_data_from_database($database_connection){
$data = $database_connection->query('blah');
return $data;
}
Version 2 : (il n'est pas nécessaire de passer une connexion à la base de données, mais peut-être pas l'injection de dépendance ?)
function get_database_connection(){
static $db_connection;
if($db_connection){
return $db_connection;
} else {
// create db_connection
...
}
}
function get_data_from_database(){
$conn = get_database_connection();
$data = $conn->query('blah');
return $data;
}
$data = get_data_from_database();
Version 3 : (la création de l'"objet"/des données est séparée, et le code de la base de données est toujours, donc peut-être cela compterait-il comme injection de dépendance ?)
function factory_of_data_set(){
static $db_connection;
$data_set = null;
$db_connection = get_database_connection();
$data_set = $db_connection->query('blah');
return $data_set;
}
$data = factory_of_data_set();
Quelqu'un a t-il une bonne ressource ou juste un aperçu qui rend la méthode et les avantages -cristallins- clairs ?