Dan*_*ani 35 oop design-patterns
我在设计游戏引擎时遇到了麻烦.例如:
当我在参考资料中思考时,我认为在ResourceManager类中管理我的引擎上的资源.
这个课有几个职责:
这对我有用,但我已经阅读了每个OOP设计教程,管理者是具有高耦合和低内聚的模糊类.我理解这一点,并且我同意,但我几乎在整个互联网上搜索了一个明确的例子,说明了管理者真正的替代方案,但我没有找到它.
有些人解释说,例如,ResourceManager应该分成更小的类:ResourceFactory,ResourceCollection,ResourceCache,ResourceFacade ......
我知道所有这些设计模式(工厂,集合,外观等)但我实际上并不了解如何将其加入以创建(易于管理)资源管理系统.
我的问题是:是否有一些教程或文档有明确的例子?有人能解释一下这个系统的例子吗?如果你能用C++或其他类似的语言写一个小例子,我会感谢你的.
在此先感谢您的帮助!
Mar*_*ann 15
你几乎已经说过了:
这门课有几个责任
(原始重点).
这违反了单一责任原则.此外,管理单词提示管理其他对象的对象,这与面向对象的原则不一致,即对象应该封装数据和行为.这很快就会导致Feature Envy代码异味.
将经理划分为许多较小的类是正确的做法.为了使它们易于管理,您可以对它们实施Facade.
egl*_*ius 12
也许:
ResourceLoader
ResourceMapper
CachedResourceLoader
/这个使用ResourceLoader
它尚未加载的时间关于"免费未使用资源"的评论中的额外信息:
首先,让我们清楚一点,我们只涉及上面的两个:ResourceMapper和CachedResourceLoader.由于在CachedResource中使用了ResourceLoader实例,因此它不会暴露给其余的代码.
请注意,以下内容取决于领域知识,因此我将保持打开/您将知道哪些有意义/适用于您拥有的部分.我想说这里有3个选项:
最后一点:我认为将责任分开并且对这样做感到强烈是绝对值得的.也就是说,这是我最常遵循的SOLID原则,我没有记住模式名称,也没有那么多关注管理类很糟糕的规则.
Ces*_*Gon 12
您不需要对设计模式或特定架构进行教条.刚做任何有意义和记录它做好.
换句话说,将一个类分解为更小的类是因为较大的类具有多个响应性是一个很好的原则,但不是一个定律.您不想不惜任何代价遵循它.看看应用它的优点和缺点.有时,将一个类分解为更小的类可以让您更好地控制责任,但这会牺牲这些类之间的大量通信.在您的示例中,您可能还要为资源加载,缓存,映射,保存等实现不同的类.但是如果每个类需要与其他类进行通信以执行其工作,那么分解不值得做,因为它需要高耦合,这很糟糕; 把它全部放在一个班级里.
有时我认为设计模式给软件开发世界带来了明显的损害!:-)
我认为你的解决方案不一定是错的.恕我直言,如果你考虑一下你从Aspect Oriented Programming的观点中所说的内容,它只是你的资源的一个方面,将由一个类处理.
虽然如果你认为你的代码库可能会发展成数百行,那么分解你的基础设施功能(域驱动设计模式)会更好.
我认为你的类是一个有凝聚力的类,并且manager
名称并不总是一个坏的标志,除了它巩固许多可能不相关的类的控制流程,这些类彼此协作以完成任务.
如果您对缓存和映射的要求很容易发生变化,那么将您的问题分开可能会更好.
在尝试编写组织良好的代码时的经验法则,一开始不要太认真,在前进时注意代码气味,并在必要时重构或重构模式.