Pattern del delegato: chi ha la responsabilità di creare oggetti di ritorno?

0

Ho una domanda su Delegate Pattern:

Se voglio delegare l'analisi di un file xml, ad esempio, che voglio essere convertito in un dizionario a valore-chiave. Prendiamo questo classico esempio ...

Qual è la migliore pratica sulla creazione di tale oggetto dizionario?

  • È l'oggetto "principale" che lo crea e passa un riferimento ad esso al delegato, chiedendogli di riempirlo,

o

  • È il delegato che crea questo dizionario aggiungere passarlo indietro all'oggetto "principale", quando ha fatto il suo lavoro, attraverso il valore di ritorno del metodo di callback (o in qualsiasi altro modo)

Uno di questi due modi è davvero migliore dell'altro? E perché?

    
posta Pierre Watelet 07.04.2011 - 14:38
fonte

2 risposte

1

Non penso che il modello di delega si preoccupi di questo. La delega riguarda il comportamento, ciò di cui sembra parlare è la proprietà.

La domanda di proprietà dipende molto dal tuo dominio. Il tuo oggetto potrebbe avere tempi di vita diversi e, in quanto tale, potrebbe essere in grado di mantenere legittimamente la proprietà per te, o in alternativa potrebbe avere una breve durata e deve restituire la proprietà al chiamante.

    
risposta data 07.04.2011 - 15:34
fonte
0

Penso che sia meglio avere il delegato a creare l'obetto da riempire e restituire.

Ciò consente il polimorfismo nella soluzione in cui il chiamante non ha conoscenza dei dettagli di implementazione effettivi diversi da quello che l'oggetto creato implementa l'interfaccia che fa parte del contratto.

Dipende dal delegato (o forse da una factory utilizzata dal delegato) per decidere sulla classe di implementazione effettiva da utilizzare.

Tutto dipende tuttavia dal contesto. Se lo spazio del problema è costituito da un solo tipo di dizionario utilizzato in tutto il sistema, il chiamante potrebbe creare e passare l'oggetto da riempire. Ciò renderebbe più difficile per il delegato comunque restituire un risultato "senza dati".

    
risposta data 07.04.2011 - 16:59
fonte

Leggi altre domande sui tag