Správné propojení 2 modelů – circular reference
- vokidas
- Člen | 2
Ahoj,
již delší dobu řeším, jak správně propojit modely, které na sebe
navzájem navazují.
Příklad:
<?php
class productModel(){
public function removeAllProductsInCategory($category_id){
// odstraneni vsech produktu v kategorii..
}
public function addNewProduct($user_id, $category_id, ...){
// overeni jestli uzivatel je vlastnikem kategorie
if($this->categoryModel->ownByUser($category_id, $user_id)){
// JE POTREBA VYUZIT METODY Z CATEGORYMODELU
}
}
}
?>
<?php
class categoryModel(){
public function removeCategory($category_id){
$this->productModel->removeAllProductsInCategory($category_id);
// odstraneni samotne kategorie...
// JE POTREBA VYUZIT METODY Z PRODUCTMODELU
}
public function ownByUser($category_id, $user_id){
// overeni jestli je uzivatel vlastnikem kategorie
}
}
?>
Je nějakým způsobem možné propojit takto productModel, který by využil metody v categoryModelu, a zároveň i naopak? Pomocí DI to nepůjde, protože by to vedlo k circular reference.
Cílem je, aby produkt znal kategorii, ve které se nachází, a zároveň aby kategorie věděla, které všechny produkty obsahuje.
Předem děkuji za všechny nápady, jak situaci vyřešit.
Editoval vokidas (13. 3. 2018 11:31)
- suwer
- Člen | 33
Pokud ti vznika „circular reference“, na 99 % je chyba uz v navrhu. Dukladneji se zamysli nad zodpovednosti jednotlivych trid a dodrzuj SRP princip.
Z toho ti pak vzniknou tridy (repository, services, …) s jednou konkretni zodpovednosti a jak ti spravne radi CZechBoY, ty nakonec (podle use case) spojis ve fasade.