【发布时间】:2020-07-10 17:03:34
【问题描述】:
一个sf::Sprite 可以与多个sf::Sprite 对象共享同一个sf::Texture 对象,所以我想设计一个纹理管理器 来多次使用不同的纹理。
我使用标识符来引用纹理。 TextureID 将纹理映射到包含该纹理的文件对应的文件路径:
std::filesystem::path mapIdToFilepath(TextureID id);
在TextureManager我想要一个成员函数loadTexture(),我在想:
-
让
loadTexture()接受TextureID:sf::Texture& TextureManager::loadTexture(TextureID id);然后该函数必须在内部通过调用
mapIdToFilepath()将标识符TextureID转换为纹理文件路径。 -
或接受纹理的文件路径作为参数:
sf::Texture& TextureManager::loadTexture(std::filesystem::path filepath);调用此函数的客户端代码必须将标识符
TextureID转换为纹理文件路径。但是,此函数不必知道mapIdToFilepath的存在,因为映射是在外部完成的。
我认为第一种方法更方便,但它将TextureManager 耦合到mapIdToFilepath(),因为它在内部执行TextureID 到文件路径的转换。
从架构的角度,在考虑这两种不同的方法时我应该记住哪些方面?
【问题讨论】:
-
“从架构的角度来看,最好的方法是什么?” - 这是 100% 基于意见的。问 100 位不同的程序员,你会得到许多不同的答案。
-
@JesperJuhl 谢谢。我已正确编辑问题以更好地表达我的意图。
标签: c++ architecture sfml clean-architecture