Я слышал, что люди говорят об инъекции зависимостей и о преимуществах этого все время, но я этого не понимаю.
Мне интересно, если это решение проблемы "Я передаю соединения базы данных как аргументы все время".
Я пробовал читать на нем запись в wikipedia, но пример написан на 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();
У кого-то есть хороший ресурс или просто проницательность, которая делает метод и преимущества -кристаллическими?