Ich höre widersprüchliche Meinungen wie:
- "Engagierte Manager-Klassen sind so gut wie nie das richtige Engineering-Tool."
- "Spezielle Manager-Kurse sind (derzeit) der beste Weg, um ein großes Projekt mit Tausenden von Ressourcen zu überleben."
Nehmen wir eine klassische ResourceManager-Klasse mit den folgenden Funktionen:
- Lädt Assets (Texturen, Audio, 3D-Modelle usw.)
- Stellt sicher, dass Assets nur einmal geladen werden, indem ein Cache aufbewahrt wird
- Die Referenz zählt die Vermögenswerte, um festzustellen, ob sie freigegeben werden können
- Versteckt, woher die tatsächlichen Assets stammen (z. B. eine Datei pro Asset oder alle Assets in einer Paketdatei oder Assets können sogar über das Netzwerk geladen werden)
- Kann Assets nachladen, ohne das Programm neu zu starten, was für die am Spiel arbeitenden Künstler äußerst nützlich ist.
Nehmen wir auch das Argument "Singletons sind schlecht" vom Tisch, indem wir so tun, als wären diese ResourceManager-Objekte keine Singletons und würden stattdessen per Abhängigkeitsinjektion weitergegeben .
Dann gibt es das Argument "Fabrik verwenden" oder "Fabrik nennen". Mein Problem dabei ist, dass es sich zwar um eine Fabrik handelt, aber auch um einen Cache und einen Reloader (mangels eines besseren Wortes). Wenn ich es eine Factory nenne, wird es nicht richtig beschrieben, und wenn ich es zu einer richtigen Factory mache, wo wird dann das Caching und das Neuladen implementiert?
Ich bin damit einverstanden, dass "Manager" -Klassen oft ein Symptom für eine schlechte Architektur sind, aber wie könnte sie in diesem speziellen Fall umstrukturiert werden und dennoch die gesamte Funktionalität behalten ? Ist dies eine Situation, in der eine "Manager" -Klasse tatsächlich angemessen ist?