数据驱动设计,引用数据

时间:2015-07-18 12:36:06

标签: java oop

我正在尝试为我的游戏设计一个好的设计。我目前正在测试数据驱动的项目系统,我希望这个系统非常灵活。

  • 我有一种需要某种弹药的武器。
  • 我有弹药类型的实际弹药。

如果玩家想要发射武器,我需要查询它是否具有正确的弹药类型。对于需要保持对弹药类型的引用的实际弹药也是如此。当玩家拿起弹药时它已经存在,它应该互相添加。

我目前正在考虑的是一种具有"短"的弹药类型。字符串供参考,因为字符串在Json文件中更易读。该类还包含弹药的信息,如正确的名称和一些额外的信息。最后,我创建了一个列表来保存不同类型的弹药。

然后,当我创建实际的弹药(物品)时,我将从我从文件生成的弹药类型列表中选择一种类型。这个弹药项目持有它的数量。我可能会使用一个接口和一个工厂来制作不同类型的弹药,当弹药被击中并且有东西被击中时(爆炸,刺穿,光弹药都表现不同)。

然后当武器想要开火时,我会通过查找"短"来检查相应的弹药是否在玩家库存中。字符串。

我想知道我是否走在正确的轨道上。我怀疑我的参考系统使用"短"弹药类型的字符串。如果我创建我的弹药类型的工厂,我可以检查我的武器射击方法,如果有该类型的弹药,我只会在工厂中使用短手弦来创建各种对象。

如果我想使用工厂并去OOP,我需要很多课程。

[Ammo]
    [Bullet]
        [762mm] //I know this is not a valid class name, have to come up with something.
        [5.56mm]
        [Etc.] //Plenty more to come thanks to data driven
    [Rocket]
        [Tornado]
        [Etc.] //Plenty more
    [Grenade] //Launcher
        [Etc.]
    [Etc.] //..

但是对于每种类型,我都可以拥有一个界面并创建功能。我可以通过比较课程来轻松比较弹药的类型。

如果我使用简写字符串的引用,我不必创建所有类,接口和工厂,但必须在长语句中设置弹药规则。从长远来看,事情可能会变得混乱。

关于这个或那个的任何想法"更好"接近这个?

1 个答案:

答案 0 :(得分:1)

由于以下原因,我建议不要采用差异化的OOP方法:

  • 数据驱动

你说弹药和武器将通过数据驱动设计创造出来。这一切都很好,但是如果你需要为每种类型的弹药都有一个新的子类,你仍然需要实际实现那个新类。这是每个弹药。可以轻松获得新的弹药......

弹药进入什么枪需要在哪里的逻辑。您可以在OOP中执行此操作,但您也可以在通用数据表中保存所有相关信息(数据驱动!在这里!)。你的代码只会实现一般规则,但不会实现子弹类型与枪支等的实际关系。这将存储在数据库中。您的代码保持不变,但行为是数据驱动的......退回当然是您的测试现在需要处理来自数据库的数据。

  • OOP与对象组成
如果您的对象真的遵循这个相当严格的模型,那么OOP一切都很好。我根本不是弹药专家,所以我可能错了,但是不可能想到具有几种父类型特征的弹药实体吗?这种关系很难在OOP中建模。这是JAVA OOP的一个缺点,因为你不能从几个父母那里继承。相反,你应该研究对象组合。

我认为您对人类可读标识符的短字符串的想法是可以的。这些也应该来自您的数据,不应该硬编码。