这是一个简单的问题,但它是我永远不会确定的问题.这主要是在游戏开发的背景下.假设你有一个实体,比如船只或角色.应该(我知道这是一个意见问题)这个对象包含一个Draw方法吗? (也许实现一个IDrawable接口)
在查看某些游戏项目中的源代码时,我发现这在很多方面都有所体现.有时,有一个单独的类可以接受一个实体基础对象并根据其属性(纹理,位置等)绘制它.其他时候,实体被赋予自己的绘制方法,并且它们能够自我渲染.
我希望这个问题不是太主观.有时我听到人们说绘画这样的东西应该与物体完全分开,他们不应该知道如何画画或者有能力.有些更实用,并且觉得这种设计对象具有这种能力是很好的.
我自己也不太确定.我没有发现任何类似的问题,因为它可能有点主观,或者任何一种方法都没问题,但我想听听SO有什么说法,因为这些设计决定每天困扰着我的发展.这些小的决定,例如对象A是否应该具有执行功能B的能力,或者是否违反某些设计原则.
我确信有些人会说,如果有必要的话,我可以稍后去做我的直觉和重构,但这就是我一直在做的事情,现在我想听听决定某些对象何时应该保持某些能力的实际理论.
我想我正在寻找的是一些启发式方法,用于确定给定对象应具有多少权限.
解决方法
你应该选择最简单的实现方式.即使事实证明你做出了错误的选择,你也可以亲身体验为什么一种方法比另一种方法更好,并且可以在将来应用这些知识.这是有价值的知识,可以帮助您以后做出决定.我发现,我学习某些优点的最佳方法之一就是做错了几次(不是故意记住你),这样你就可以很好地理解一种方法的缺陷.
我处理它的方式是:一个实体拥有绘制它所需的所有信息.例如构成它的精灵,它们相对于实体中心的位置.如果有的话,实体本身做的很少.它实际上只是一个存储其他系统运行信息的地方.
世界渲染代码处理绘制世界以及其中的所有实体.它查看给定的实体并在正确的位置绘制每个精灵,应用任何必要的相机变换或效果或者你有什么.
这就是我的大多数游戏的运作方式.实体也不了解物理学或任何东西.它只是一个数据集合,其他系统运行.它不知道物理学,但它确实有一些Box2D结构挂在它上面Box2D在物理更新阶段操作.与AI或输入和其他一切相同.