Comportamento specifico e generico per gli oggetti derivati di cui il client non deve essere a conoscenza

3

Abbiamo un database con tabelle che utilizzano una gerarchia di ereditarietà. Un'entità nella tabella derivata avrà un ID che corrisponde a un'entità nella tabella di base e così via attraverso la gerarchia.

Abbiamo classi di repository per i tipi / tabelle derivati in modo che tu possa ottenere istanze specifiche per ID. Il problema che abbiamo al momento è che vogliamo la capacità di applicare un comportamento specifico ad alcune entità, ma vogliamo anche un comportamento generico applicato a tutte le entità di base. Sarebbe bene se un cliente potesse trattare una raccolta di entità come entità di base e chiamare semplicemente il metodo per eseguire questa azione su di essa, senza dover conoscere il comportamento specifico.

Quindi il client riceverà dal server una raccolta di entità, incluso il loro ID. Il client chiamerà quindi un metodo sul server con alcuni di questi ID e in qualche modo il server deve essere in grado di stabilire a quali tipi derivati appartengono gli ID.

Ho considerato di lasciare l'ereditarietà della tabella sul posto in modo che i dati non siano duplicati, ma con un tag di "tipo" nella tabella di base. Ciò sta annullando lo scopo della gerarchia dell'eredità?

    
posta NickL 17.12.2013 - 15:23
fonte

1 risposta

0

Un tag type è perfettamente normale. Semplifica davvero le query.

 select p.type, p.foo, a.bar, b.baz
 from parent p
 join child a on p.id = a.id
 join child2 b on p.id = b.id
 where p.type = 'some type'

Il database non ha il polimorfismo e avrete bisogno di un identificatore a livello globale (cioè tabella genitore) per effettuare la transizione dal database agli oggetti di classe

    
risposta data 17.12.2013 - 19:47
fonte

Leggi altre domande sui tag