è sbagliato per il mio oggetto genitore fare ipotesi sugli oggetti figlio?

2

Ho un dominio semplice con circa 6 oggetti nel modello. Per la maggior parte hanno un chiaro rapporto figlio / genitore con il genitore che ha figli multipli. Ho intenzione di avere tutti loro immutabili. Tuttavia, ad un certo punto avrò bisogno sia di recuperare un insieme di tutti gli oggetti di un determinato tipo, sia di recuperare un oggetto specifico di un certo tipo tramite la sua etichetta.

Avrei avuto un modello con alcune mappe generiche e una classe astratta per gli oggetti nel modello. Aggiungendo al modello si attacca l'oggetto nella mia mappa e si chiede gli oggetti genitore e si attacca quelli nella mappa, ecc. Allo stesso modo una cancellazione può cancellare tutte le classi che si definiscono bambini. In questo modo posso interrogare per classi specifiche in un metodo generico senza scrivere la logica per dare la caccia a ogni classe.

Una volta pensato a questo, il mio prossimo pensiero è stato piuttosto di poter utilizzare un framework simile per risparmiare CPU cercando i bambini nello stesso modo. Se devo già memorizzare "questi oggetti hanno affermato che x era un genitore" per fare l'eliminazione posso quindi dire "dammi figli di X". Tuttavia, questo presuppone che X sappia qualcosa sugli altri oggetti (quali classi sono effettivamente figli di esso). Posso inserire il tipo safty tramite riflessione principalmente; ma è fragile per un oggetto presumere che certe altre classi lo rivendichino come genitore e si inseriscano con sicurezza nel modello in quanto tale?

Per chiarire, diciamo che ho una classe nodo e bordo. Il mio spigolo segnalerebbe un nodo come genitore. Il mio nodo può quindi dire "dammi tutti gli oggetti che mi hanno sostenuto come genitore e sono spigoli" e fare la logica su di loro; anche se non ha mai fatto nulla per assicurare che ci fossero dei bordi là fuori che lo usassero come nodo. È sbagliato?

Nota, questo è un piccolo sistema. So che esistono grandi schemi di astrazione per sistemi enormi, che per la maggior parte non credo valgano il costo di implementazione o il codice meno esplicito per un sistema così semplice.

    
posta dsollen 03.05.2013 - 23:55
fonte

2 risposte

2

Come un'interfaccia, una classe non definitiva è come un contratto. Le classi che ne derivano dovrebbero soddisfare il contratto, indipendentemente da quali altre funzionalità supportano. I linguaggi orientati agli oggetti fanno molto per garantire che le classi figlie soddisfino effettivamente i contratti specificati dalle loro classi base, ma in alcuni casi il contratto non può essere soddisfatto dalle caratteristiche della sola lingua.

Dovresti fare ciò che puoi nel linguaggio che hai scelto per assicurarti che il contratto sia soddisfatto (generici o modelli potrebbero aiutarti qui se sono supportati). Ma direi che va bene trattare le classi dei bambini come se soddisfassero il contratto se non sei in grado di garantirlo attraverso la lingua.

    
risposta data 04.05.2013 - 01:05
fonte
0

Se non è un framework (con nuovi bambini aggiunti dagli utenti) e metti una versione ridotta della domanda nel genitore come commenti di codice, allora va bene.

Anche se fosse un framework, sarebbe ok se avessi avvisato gli utenti, anche se sarebbe più utile se ci fosse qualche validazione / controllo - > esplicita e / o tramite funzionalità linguistiche.

    
risposta data 05.05.2013 - 02:35
fonte

Leggi altre domande sui tag