Autor Zpráva
Jirin
Profil
Chci dělat systém, který bude mít na sobě nezávislé moduly. A chtěl bych nasadit Dcotrine. Nicméně jde udělat nezávisle entity?

Uvedu příklad mějme články a komentáře.Chtěl bych mít samostatně nezávislou entitu Article a nezávislou entitu Comment. Protože zkrátka někdy můžu chtít člányk s komentáři jindy bez, případně komentáře použít jinde. No a když budu chtí články s komentáři tak samozřejmě tam budu mít v entitě vazbu komentář-článek, ale někdy zase ne. Jak tohle řešíte a je ot ešitelné vůbec?

Vím, že existuje v Doctrine ResolveTargetEntityListener. Nicméně tne to podle mě neřeší ten řeší to, že bude Entita záviset na jiné s určitým interface, nicméně neřeší to nijak, že někdy tam bude a někdy bude nulová nebo ano?
Majkl578
Profil
V dokumentaci je přesně na toto téma pěkný článek, ten jsi četl?
Jirin
Profil
Ano četl, však ho v posledním odstavci zmiňuji. Nicméně pochopil jsem to tak, že tam ta vazba je vždy a nejde, že by byla ta vazba null. Nebo jsem to špatně pochopil?
Majkl578
Profil
Vazby jsou v Doctrine nulové defaultně, pokud není uvedeno jinak (tj. např. @ORM\JoinColumn(nullable=false)).

zkrátka někdy můžu chtít člányk s komentáři jindy bez
Tohle je ale jiný problém, související se samotným návrhem, ne s nezávislostí modulů. Buď může mít každý článek vazbu na komentáře a aplikační logika by pak očetřovala samotnou možnost existence komentářů, nebo lze mít např CommentableArticle s vazbou na komentáře dědící od Article bez komentářů.

případně komentáře použít jinde
Z pohledu vazby tohle nedává smysl. Pokud chceš komentář používat na různých místech (tj. i jinde než u článků apod.), neměla by vazba vést obousměrně, ale jednosměrně (1:N) s join tabulkou (viz One-To-Many, Unidirectional with Join Table). Jinak bys u komentáře musel mít vazbu na každý typ, který je komentovatelný, což zřejmě nebude správně.
Jirin
Profil
Díky za odpověď, ano tím potomkem CommentableArticle apod to mohu řešit, jenže je tam problém, že těch "specifických věcí mohu mít více. Napadá mě třeba budu chtít přidat autora k článku, případně kategorie a to by pak bylo xxx potomků. Zkrátka bych chtěl ideálně něco na způsob mám základní třídu article, a jak ji zavedu mohu si dodat další atributy.

S moduly to má hodně společného. Chci například modul obsluhující ryze jen článek, potom modul obsluhující jen komentáře. No a pak ten komentářový modul budu chtít použít třeba pod produkty v eshopu, nebo potom jako komentáře k anketě.

Zkrátka bych potřeboval nějakou základní entitu a tu pak při nasazení rozšířit o to, na co ji budu konkrétně potřebovat, ale tak abych do té původní entity nesahal. Např. bych měl další modul který by tu entity "překryl" nebo tak.

Je to v doctrine řešitelné?

S tou jednosměrnou vazbou jinak máš pravdu, tak by to šlo řešit, sice tam přidju o tu snadnou možnost, že mi entita Article vrátí list komentářů, ale s tím se moc nedá dělat, tak to mi bude vracet verstva výše:)
aDAm
Profil
Nevím zda tě chápu přesně, ale udělej s globální entitu "Komentář" co bude mít prvky pro všechny společné a nad ní postav jednotlivé entity pro komentáře článku, ankety, produktu atd a tyto entity budou tu hlavní dědit.
Jirin
Profil
Ano, tak to je řešitelné celkem, ale obává mse výkonosti. Protože když takhle udělám článek třeba, tak tam bych chtěl mít volitelné například, kategorie, autor, tagy atd atd. No a to uz bych těch překrývajících zděděných tříd dělal asi moc..

Ono jde na to taky přistoupit i obráceně, udělat naopak entitu s co nejvíce atributy a pak by se ty atributy co nechtěli "vyškrtli", ale to taky nijak asi nejde, abych řekl, tohle nepoužívej. A tak by ta databáze podle toho byla stejně vygenerovaná.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: