Devo scrivere un wrapper all'interno di un oggetto manager?

4

Ho tre classi che lavorano insieme per fare una funzione (dal punto di vista del resto del mio programma). C'è un po 'di configurazione tra di loro, quindi, per renderlo più facile per il resto del mio programma, li ho raggruppati in:

  • ListManager : oggetto, che li inizializza ai valori corretti quando viene costruito. I tre oggetti che memorizza sono:

    • Timer :
    • TriggerManager : fondamentalmente un wrapper attorno a ArrayList che gestisce Trigger oggetti
    • CueList : una lista collegata con i soliti getter e setter che vengono con quello.

Dato che il resto del mio programma sta solo interagendo / facendo riferimento alla classe TriggerManager , dovrei scrivere metodi wrapper per gli oggetti che gestisce?

  1. Quindi dovrei creare ListManager.add(Cue c) come wrapper per CueList.add(Cue c) .
  2. O dovrei semplicemente aggiungere getter per i tre oggetti e lasciare che il resto del mio programma lo usi per manipolarli.

Tendo a pensare che l'opzione successiva sia molto più gestibile, ma allo stesso tempo, il codice viene prodotto se faccio sembrare il wrapper ... più carino ...

Qual è la migliore pratica in situazioni come questa?

    
posta sinθ 08.06.2013 - 01:04
fonte

1 risposta

1

Dipende dal tipo di astrazione che vuoi ottenere con ListManager . Se ListManager è solo una tupla di dati di 3 oggetti indipendenti, l'approccio "wrapper" è inutile. Se fornisce un'astrazione a sé stante, poiché i 3 oggetti non sono indipendenti l'uno dall'altro, è necessario utilizzare metodi di accesso specifici.

Ad esempio, vuoi che il resto del tuo programma abbia il pieno controllo su ListManager.CueList ? E questo non introduce alcuna insidie specifica per l'utente del tuo ListManager ? Quindi aggiungi un getter pubblico per CueList .

O è meglio quando il resto del tuo programma ottiene solo un accesso limitato a ListManager.CueList (ad esempio, per consentire solo un sottogruppo specifico dei metodi CueList di essere chiamato come CueList.add )? Questo potrebbe prevenire errori non intenzionali? Ad esempio, deve CueList.add essere sempre chiamato in congiunzione con alcune operazioni aggiuntive? Quindi utilizza l'approccio ListManager.add(Cue c) .

    
risposta data 09.06.2013 - 00:04
fonte