инверсия зависимостей это когда у тебя объект более высокого уровня зависит от реализации объектов более низкого уровня
class KeyboardReader{
function __constructor(){
}
function readKeyboard(){
}
}
class FileWriter{
function __constructor(){
}
function writeFile($data){
}
}
class Copier{
public function copy(new KeyboardReader(),new FileWriter()){
while ( ($data = $reader->readKeyboard()) !== false )
{
$writer->writeFile($data);
}
}
}
вобщем реюзнуть класс Copier у вас в другом контексте не выйдет
а инверсия зависимостей уберает эту зависимость, вобщем масло масленое и маргарин
class Reader implement Reader{
function __constructor($outputStream){
}
function read(){
}
}
class Writer implement Writer{
function __constructor($inputStream){
}
function write($data){
}
}
class Copier{
public function copy(new Reader(new FileOutputStream('file1.txt')),new Writer(new FileInputStream('file2.txt'))){
while ( ($data = $reader->read()) !== false )
{
$writer->write($data);
}
}
}
это пассивная инверсия зависимостей c "впрыском в конструктор" (простите не силен в русской терминологии на англиском звучит как constructor injection)
так вот если применять эту хрень к базе и какому-либо-объекту
class SomeClass{
public function saveData($db){
$db->save($this);
}
}
то получаеться такая замечательная хрень что база должна знать как сохранить объект
но вобщем вопрос был не об этом а о том что лучше делигирование через впрыск (делигирование через создание нового экземпляра меня тоже не интересует) или паттерн локатор (регистр)