代码之家  ›  专栏  ›  技术社区  ›  cf-

是拥有更多的Java类更好,还是让更少的类做更多的工作更好?[已关闭]

  •  1
  • cf-  · 技术社区  · 12 年前

    我目前正在制作一款游戏。目前,我有一个类(游戏环境)负责保存游戏对象(敌人、武器等)的集合,并进行碰撞检查,调用对象的创建例程等。随着项目的进展,我开始怀疑我是否应该有一个更分层的方法-比如说,有一个WeaponsManager、一个EnemiesManager,和一个将所有东西放在一起的Environment,或者让我的Environment类像我现在所做的那样操纵每个对象?

    值得一提的是,游戏对象已经有了相当厚的层次:

    BaseClass
    -----EnemyClass
    ----------Enemy1Subclass
    ----------Enemy2Subclass
    -----WeaponClass
    ----------Weapon1Subclass
    ----------Weapon2Subclass
    

    BaseClass定义了基本的对象属性,例如位置。EnemyClass和WeaponClass是相当通用的类,它们定义了更多特定于类的方法和属性,例如EnemyCClass的速度或WeaponClass的伤害。它们大多存在,所以我可以有相当通用的集合,而不是为每个敌人/武器类型单独的集合。Enemy1Subclass/Enemy2Subclass和Weapon1Subclass/Weapon2Subclass是实际创建和使用的敌人/武器类。

    My Environment类存储EnemyClass/WeaponClass的集合,并通过调用游戏对象的方法进行必要的操作。

    Environment (manipulates EnemyClass and WeaponClass objects by iterating over their respective arrays and calling their respective methods; doesn't do any subclass-specific stuff)
    -----EnemyClass array
    ----------Enemy1Subclass entry
    ----------Enemy2Subclass entry
    ----------Enemy1Subclass entry
    -----WeaponClass array
    ----------Weapon1Subclass entry
    ----------Weapon2Subclass entry
    ----------Weapon2Subclass entry
    

    但现在我想知道,如果Environment持有EnemyManager/WeaponManager类,而各自的管理者持有并操纵他们的集合,那么另一层分离是否是个好主意:

    Environment (calls generic instantiation, destruction, moving, etc. methods in EnemyManager and WeaponManager; doesn't ever directly interact with an EnemyClass or WeaponClass object)
    -----EnemyManager (gets instructions from Environment and manipulates EnemyClass objects to carry out those instructions)
    ----------EnemyClass array
    ---------------Enemy1Subclass entry
    ---------------Enemy2Subclass entry
    ---------------Enemy1Subclass entry
    -----WeaponManager (gets instructions from Environment and manipulates WeaponClass objects to carry out those instructions)
    ----------WeaponClass array
    ---------------Weapon1Subclass entry
    ---------------Weapon2Subclass entry
    ---------------Weapon2Subclass entry
    

    思想?建议?我找不到任何关于这种“更多阶级或更努力工作阶级”的惯例的信息,所以任何答案都是公平的,直到并包括“你的模型是垃圾,重新开始。”尽管希望不会出现这种情况。;)

    3 回复  |  直到 12 年前
        1
  •  3
  •   WannabeCoder    12 年前

    一般来说(非常普遍),面向对象语言的一个主要优势是封装,即最好将相关的函数/方法和数据分组在一起(具有适当的权限)。在这里应用,这意味着只要“有意义”,就可以更好地分离代码。在您的示例中,“更难工作的类”意味着类更大,更难理解,并且处理大量数据。两个很好的指导方针涵盖了连续体的任何一边:

    • 如果你需要一个流程图来跟踪一个类中发生的一切,你可能应该创建另一个类
    • 如果您注意到类A只包含类B,而类B只包含方法C,那么这可能都在一个函数中

      总之,只要尽你所能确保你的代码被分成合理的部分,而不是多余的部分。

        2
  •  0
  •   user1131435 user1131435    12 年前

    请记住,在(几乎)所有编程中,清晰度是关键。

    在这种情况下,做最直观的事情。我发现,将程序和函数拆分为多个类通常是值得的,因为它提高了可维护性,并使代码通常更明确。

    然而,在 syntactic sugar syntactic saccharin 。换句话说,保持你的组织尽可能整洁,但不要过度。做让你的代码最清晰的事情。

    在这种情况下,这似乎是一个很好的用途 interface s.尽量避免 instanceof 何时可以创建接口或抽象类的新实例。

        3
  •  0
  •   Alexander Rühl    12 年前

    尽管在开始黑客攻击之前先考虑一下体系结构是件好事,但将编程视为一个迭代过程。所以,从最简单的事情开始,然后不断地进行重构。这样,您就不会过度紧张,并保持代码的可维护性。因此,关于你的帖子标题,从一个班开始做这项工作,如果你到了提取某些东西有意义的地步,那么就去做吧——今天的IDE会让你很容易做到。