Sento opinioni contrastanti come:
- "Le classi Manager dedicate non sono quasi mai lo strumento di ingegneria giusto"
- "Le lezioni di Manager dedicati sono (attualmente) il modo migliore per sopravvivere a un grande progetto con migliaia di risorse"
Prendiamo una classica classe ResourceManager che ha le seguenti funzionalità:
- Carica risorse (trame, audio, modelli 3D, ecc.)
- Assicura che le risorse vengano caricate una sola volta mantenendo una cache
- Il riferimento conta le attività per determinare se possono essere deallocate
- Nasconde la provenienza delle risorse effettive (ad esempio, potrebbe essere un file per risorsa o tutte le risorse in un file pacchetto, oppure le risorse potrebbero anche essere caricate sulla rete)
- Può ricaricare risorse senza riavviare il programma, il che è estremamente utile per gli artisti che lavorano al gioco.
Prendiamo anche l'argomento "singletons are bad" fuori dal tavolo fingendo che questi oggetti ResourceManager non siano singleton, e invece vengano passati attraverso l' iniezione di dipendenza .
Poi c'è l'argomento "usa una fabbrica" o "chiamalo fabbrica". Il mio problema con questo è che, sì, è una factory, ma è anche una cache e un ricaricatore (per mancanza di una parola migliore). Chiamarlo factory non lo descrive correttamente, e se lo trasformo in un factory appropriato, allora dove vengono implementate la cache e il ricaricamento?
Concordo sul fatto che le classi "Manager" sono spesso un sintomo di cattiva architettura, ma in questo caso particolare come potrebbe essere ristrutturata e conservare comunque tutte le funzionalità ? È una situazione in cui una classe "Manager" è effettivamente appropriata?