Návrh modelu s viacerými príbuznými triedami a DI
- Pablo
- Člen | 2
Aký je správny spôsob vytvárania modelu v takejto teoretickej situácií:
- Majme 2 triedy: Kniha a Autor
- Kniha má dve závislosti, ktoré očakáva v konštruktore: objekt ZdrojDátOKnihách1 a objekt ZdrojDátOKnihách2
- Autor má iba jednu závislosť, ktorú rovnako očakáva v konštruktore: ZdrojDátOAutoroch
V configu si viem veľmi jednoducho vytvoriť továrničky na obe triedy:
factories:
kniha: Kniha(@zavislost1, @zavislost2)
autor: Autor(@zavislost3)
Čo ale v prípade, ak má Autor metódu napísanéKnihy a Kniha metódu autor? Obe metódy by mali vrátiť objekt druhej triedy, ako sa ale dostanú k továrničke, ktorá sa postará o injektovanie závislostí?
Prípadne, ak je toto nesprávny prístup k návrhu modelu, ako by sa takáto situácia mala ideálne riešiť?
Editoval Pablo (29. 3. 2012 23:17)
- Filip Procházka
- Moderator | 4668
Špatně, protože vytvářet entity ve factories nedává smysl.
Lepší je mít nějaký model, který je bude obsluhovat a předat závislosti jemu. Takový model pak závislosti může předat i konkrétní entitě, ale máš tu výhodu, že model samotný můžeš předat jinému. Zastane tedy roli, do které jsi postavil DIC tím, že se v něm snažím vytvářet entity a musel bys ho předávat do služeb.
Konkrétně:
class Books
{
public function __construct($one, $two, $authors);
public function create()
{
return new Book($this->one, $this->two, $this->authors->find(123));
}
}
class Authors
{
public function __construct($three);
public function create()
{
return new Author($this->three);
}
}
A v configu
services:
books: Books(@one, @two, @authors)
authors: Authors(@three)
Takto si můžeš entity vyžádat i jinde.