次のような相反する意見を聞いています。
- 「専任のマネージャークラスはほとんど適切なエンジニアリングツールではありません」
- 「専用マネージャークラスは(現在)何千ものリソースを持つ大規模プロジェクトを生き残るための最良の方法です」
次の機能を持つ従来のResourceManagerクラスを見てみましょう。
- アセット(テクスチャ、オーディオ、3Dモデルなど)をロードします
- キャッシュを保持することにより、アセットが一度だけロードされるようにします
- 参照は、資産を割り当て解除できるかどうかを判断するために資産をカウントします
- 実際の資産の出所を隠します(たとえば、資産ごとに1つのファイル、1つのパッケージファイル内のすべての資産、またはネットワークを介して資産をロードすることもできます)
- プログラムを再起動せずにアセットをリロードできます。これは、ゲームに取り組んでいるアーティストにとって非常に便利です。
また、これらのResourceManagerオブジェクトがシングルトンではなく、依存性注入を介して渡されるように見せることにより、テーブルから「シングルトンは悪い」引数を取りましょう。
次に、「ファクトリを使用する」または「ファクトリと呼ぶ」引数があります。これに関する私の問題は、はい、それはファクトリーですが、キャッシュとリローダーでもあるということです(より良い言葉がないため)。それをファクトリと呼ぶことはそれを適切に記述しません、そして私がそれを適切なファクトリにするならば、キャッシングとリロードはどこで実装されますか?
「マネージャー」クラスはしばしば悪いアーキテクチャの症状であることに同意しますが、この特定のケースでは、どのように再構築し、すべての機能を保持できますか?これは、「Manager」クラスが実際に適切な状況ですか?