Ahoj,
vyvýjim model a narazil jsem.
Mám třídy:
- Base
- User
- UserAdress
- Customer
- Company
Potřebuju přistupovat pouze k třídám Company a Customer s tím že v případě ukládání dat budou volat ukládání UserAdress, ta bude volat ukládání User. Třídy kopírují tabulky a ty jsou propejené vzdáleným klíčem.
První možnost která mě napadla, respektive jsem ji začal programovat bylo podědění
User extends Base
UserAdress extends Base
Customer extends UserAdress
Company extends UserAdress
V metodě save se vždy volalo parent::save() s tím že save vracela PK aktuálního záznamu. Vše bylo v pořádku než jsem zjistil že potřebuju dědit od dvou předků (Jiný druh tabulek).
Začal jsem tedy přemýšlet a došel k druhé verzi, kde každá třída dědí od Base (V base jsou pouze základní funkce) a v metodě save volají "předky"
např:
UserAdress zase zavolá User a další které potřebuje (V případě více PK)PHP kód:class Company extends Base{
public function save($data){
//Zavolá UserAdress(), na ní metodu save()
$this->context->models->userAdress->save($data);
}
}
Jak ale zamezit volání User, UserAdress... odjinud než z finálních Customer, Company? Pokud by se volali odjinud, mohlo by dojít k uložení neúplných data. V třídách Customer Company mám transakce, který sdružují všechny "poddotazy".
Napadlo mě vytvořit interface IFullUser pro customer,company a v metodě save si je vyžádat, to mi ale nezajistí odkud se metoda volá, pouze mě přinutí tento parametr předat i přesto že jej nepotřebuji.


