我正在写一个游戏,其中鼠标驱动的 Controller 对象单击玩家对象以使其执行某项操作。
有两种方法可以启动鼠标和播放器之间的交互:
Controller 监听鼠标事件。当鼠标单击出现在屏幕上的任何位置时, Controller 将在单击的点下方搜索所有对象。如果其中一个对象是播放器对象,并且其“clickable”属性为true,则调用其适当的函数。
播放器监听鼠标事件。当在播放器上单击鼠标,并且播放器自己的“clickable”属性为true时,请调用 Controller 的适当功能。
我的困境是,第一个选项似乎更直观地了解现实世界中发生的场景,但是第二个选项在正确的面向对象设计中似乎更直观,因为它不需要查看另一个对象的属性,这违反了某种程度上的封装( Controller 必须调查播放器以读取其“clickable”属性)。此外,第二个选项似乎与“ Controller ”设计模式保持一致。
这对我来说一直都是一个挣扎-我是否无视正确的面向对象设计(例如选项1)还是使用一种似乎与现实世界背道而驰的实现(例如选项2)?
我希望我缺少某种中间立场。
最佳答案
This is always a struggle for me -- do I defy proper object-oriented design (e.g. option 1) or do I use an implementation that seems counterintuitive to the real world (e.g. option 2)?
我认为面向对象的目的不是为现实世界建模。
我认为OO模型经常遵循现实世界模型的一个(the?)原因是现实世界变化不大:因此选择现实世界作为模型意味着软件不会变化很大,即维护成本低廉。
对真实世界的忠实本身并不是设计目标:相反,您应该尝试使其他指标最大化的设计,例如简单。
“面向对象”中的“对象”是软件对象,不一定是现实世界中的对象。
关于actionscript-3 - 为真实世界还是适当的OOP世界建模?或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1354312/