Я постоянно слышу, как люди говорят о внедрении зависимости и о ее пользе, но я не совсем понимаю.
Мне интересно, является ли это решением проблемы "Я все время передаю соединения с базой данных в качестве аргументов".
Я попытался прочитать статью в Википедии, но пример написан на Java, поэтому я не совсем понимаю разницу, которую он пытается прояснить. (http://en.wikipedia.org/wiki/Dependency_injection).
Я прочитал эту статью о внедрении зависимостей в php (http://www.potstuck.com/2009/01/08/php-dependency-injection/), и похоже, что цель состоит в том, чтобы не передавать зависимости напрямую объекту, а оцепить создание объекта вместе с создание его зависимостей. Я не уверен, как применить это в контексте использования функций php.
Кроме того, является ли следующее внедрение зависимостей, и стоит ли мне пытаться сделать внедрение зависимостей в функциональном контексте?
Версия 1: (код, который я создаю, но не люблю каждый день)
function get_data_from_database($database_connection){
$data = $database_connection->query('blah');
return $data;
}
Версия 2: (не нужно передавать соединение с базой данных, но, возможно, не внедрение зависимости?)
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();
Версия 3: (создание «объекта» / данных выполняется отдельно, а код базы данных остается неизменным, поэтому, возможно, это будет считаться внедрением зависимости?)
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();
У кого-нибудь есть хороший ресурс или просто понимание, которое объясняет метод и выгоду -crystal- ясно?