我听到有相互矛盾的意见,例如:
- “专用的Manager类几乎永远不是正确的工程工具”
- “(目前)专用的Manager类是在拥有数千个资源的大型项目中生存的最佳方法”
让我们来看一个经典的ResourceManager类,它具有以下功能:
- 加载资产(纹理,音频,3D模型等)
- 通过保留缓存确保资产仅加载一次
- 引用计数资产以确定是否可以将其释放
- 隐藏实际资产的来源(例如,每个资产一个文件,或一个包文件中的所有资产,或者甚至可以通过网络加载资产)
- 可以在不重新启动程序的情况下重新加载资产,这对于从事游戏的美术师来说非常有用。
假装这些ResourceManager对象不是单例,而是通过依赖项注入传递它们,让我们从表中删除“ singletons is bad”参数。
然后是“使用工厂”或“称其为工厂”参数。我的问题是,是的,它是一个工厂,但它也是一个缓存和一个重装器(因为缺少更好的词)。称其为工厂并不能正确地描述它,如果我将其设置为合适的工厂,那么在哪里实现缓存和重新加载呢?
我同意“经理”类通常是不良体系结构的征兆,但是在这种特殊情况下,如何对其进行重组并仍然保留所有功能?这是“经理”类实际上合适的情况吗?