Úvahy nad použitím Dependency injection
- jik
- Člen | 149
Zdravím,
Podle dokumentace lze DI použít ke komunikaci s databází. V dokumentaci je
příklad třídy Article obsahující metodu save, která provádí insert
do db:
<?php
function save() {
$this->connection->query('INSERT INTO articles', array(
'title' => $this->title,
'content' => $this->content,
));
}
?>
kerou potom použiji takto:
<?php
$article = new Article($connection);
$article->title = ...
$article->content = ...
$article->save();
?>
To je jasné. Ale:
- V jednom z mých prvních dotazů tady jsem byl upozorněn, že query je skoro jako sprosté slovo ;-)
- Jakou to má vlastně výhodu proti přístupu, který jsem pochytil v tutoriálu, kdy mám model a v něm metodu:
<?php
public function createArticle ($title, $content) {
return = $this->getTable()->insert(array(
'title' =>$title,
'content' =>$content));
}
?>
a použiji ji v presenteru:
<?php
$return = $this->context->article->createArticle('title of the article', 'content of the article');
?>
Mám dojem, že v tomto případě DI není to pravé ořechové. Nebo se mýlím? Kde vlastně hledat využití?
- Šaman
- Člen | 2666
DI řeší jen jakým způsobem se dostane databáze ($connection) do třídy modelu (Article). U tvého řešení není jasné, kde se ti ta databáze vzala, resp. vypadá to, že přímo dědíš od Connection, nebo Selection a to není dobré.
Query není sprosté slovo v Dibi, nebo Nette\Database, ale mnoho lidí používá Nette\Databese\Table, což je nadstavba, kde se už query nepoužívá.
Zato návrh modelových tříd metodou ActiveRecord, což je ten první případ, není úplně vhodný. Jakmile se projekt trochu rozroste, mohou s ním být problémy.