我和一群朋友在过去的一段时间里一直在从事一个项目,我们想发明一种很好的面向对象的方法来表示特定于我们产品的方案。基本上,我们正在开发东方风格的 子弹地狱游戏,我们希望建立一个系统,在其中可以轻松表示我们可以梦想的子弹的任何可能行为。
这就是我们所做的;我们制作了一个非常优雅的架构,使我们可以将项目符号的行为划分为不同的组件,这些组件可以随意附加到项目符号实例上,类似于Unity的组件系统。它工作得很好,易于扩展,灵活并且覆盖了我们的所有基础,但是存在一个小问题。
我们的应用程序还涉及大量的程序生成,即我们以程序方式生成项目符号的行为。为什么这是个问题?好吧,我们的OOP解决方案虽然表现优雅,但是代表人的举止却很复杂,如果没有人使用它,工作起来会有些复杂。人类足够聪明,可以想到既合理又明智的问题解决方案。程序生成算法还不那么聪明,我们发现很难实现一个充分利用OOP架构的AI。诚然,该体系结构的一个缺陷是并非在所有情况下都直观。
因此,为了解决此问题,我们基本上将不同组件提供的所有行为都推到了bullet类中,这样我们可以想像到的一切都直接在每个bullet实例中提供,而与其他关联的组件实例不同。这使我们的过程生成算法更容易使用,但是现在我们的bullet类是一个巨大的上帝对象。到目前为止,它很容易成为程序中最大的类,它的代码量是其他任何代码的五倍以上。维护也有点麻烦。
可以让我们的一个类变成一个上帝对象,只是为了使其更容易处理另一个问题吗?通常,如果它允许更轻松地解决其他问题,代码中是否会有代码味道是可以的吗?