Předávání závislostí – boptnání

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MartinitCZ
Člen | 580
+
0
-

Snažim se vyřešit závislosti v Nette database. Abych to trochu vysvětlil, tak zde uvedu příklad(y).
Máme tabulku article, article_slug a article_tag. Rád bych měl vztah 1:1, tedy co tabulka to php soubor (model).
Jenže díky tomu mi naboptnají závislosti. Když budu mít formulář, kde ukládám články, tak musím předat 3 modely přes constructor.

Osobně se mi toto řešení moc nelíbí. Jak to řešíte vy?

Napadlo mě jedno řešení, ikdyž nevím, zda je to zrovna dobrý způsob.

Vytvořím si articleModel, kde budu přidávat články, upravovat … vyhledávat..... A pomocí articleModel se dostanu k ArticleTagModel =>

$this->articleModel->updateBy(array('id' => 1));
$this->articleModel->slug->findOneBy('name' => 'moto');
$this->articleModel->tag->findOneBy('name' => 'car');

Tzv. když budu chtít pracovat s tabulkou article, article_tag nebo article_slug, tak si vždy injectu articleModel a k ostatním se dostanu pomocí něj.

Snad to chápete.

vitkutny
Člen | 73
+
0
-

ke každé tabulce měj 1 třídu které nebudou navzájem na sobě závislé

articleRepository
articleTagRepository
articleSlugRepository

pro akce ke kterým potřebuješ více těchto tříd si vytvoř mezivrstvu (fasádu) a do formuláře nebudeš předávat všechny repozitáře ale jen tuto mezivrstvu

class ArticleFacade {

	private $repository;
	private $tagRepository;
	private $slugRepository;

	public function __construct(ArticleRepository $repository, ArticleTagRepository, $tagRepository, ArticleSlugRepository $slugRepository){
		$this->repository=$repository;
		$this->tagRepository=$tagRepository;
		$this->slugRepository=$slugRepository;
	}
}