2011-01-28 68 views
0

当编程一些重要的东西时,我恰好有点挑剔。我试图通过速度和复杂性来找到最好的方法。由于我在前3个月一直在学习Rails,所以我试着找到最好的技术。我想问你,你将如何去写一些像这样的代码:组织代码的轨迹

@defender = User.find_by_id(user_id) 
@attacker = current_user.clone 
@attacker_starting_attribs = current_user 
@defender_starting_attribs = @defender.clone 
@defenderWeapon = @defender.getEquippedWeapon 
@attackerWeapon = @attacker.getEquippedWeapon 
@combat = Combatant.fight(@attacker, @defender) 

此代码是关于浏览器的游戏两个人之间的战斗结果。代码运行良好,但我在编码方面存在一些问题。事实上,我知道我的代码在这里很糟糕,这就是为什么我问你一个更好的版本会是什么。让我解释一下在这段代码中会发生什么。

@defender由user_id给出,所以我想这部分是需要的。现在,在@attacker中我克隆了current_user。原因是Rails在对象上工作,current_user将在Combatant.fight中更改。我需要新的惠普和旧的惠普,这就是为什么我克隆的对象。防御者和攻击者开始attribs说明这个概念。现在,我得到实例变量中的武器,以便我可以在最终视图中获取他们的信息。

然而,武器内部的斗争功能需要,我在斗争()内再次执行两次相同的getEquippedWeapon。我不太喜欢打架(@attacker,@ defender,@attacker_weapon,@ defender_weapon),但我不喜欢重复的想法。所以,我想就此发表意见。

@combat是一个包含战斗结果的散列。扑灭发生,我在视图中回到散列。

我不喜欢我在那个舞台上的编码,我想要你的意见。你会怎么做?有没有设计模式?请告诉我你的意见。

Thanx :)

+0

尝试在[Code Review SE站点](http://codereview.stackexchange.com/)上询问此问题以获得更好的结果。 – Shaun 2011-01-28 03:33:35

+0

如果你想让我迁移我可以。然后,您可以将您的SO帐户关联到codereview并从此处获取。将来可能会有这样的问题一定会被移动。 – Will 2011-01-28 21:50:34

回答

0

我很难完全理解你想要做什么。虽然我得到了它的要点(2人战斗)。我现在还不能提供答案,但希望这可以让球滚动:

从您提供的代码中,@attacker_starting_attribs@defender_starting_attribs未被使用。

就“好技术”而言,我尽量保持OO。而不是 Combatant.fight(@attacker, @defender),我会做@attacker.fight(@defender)

作为一个红宝石约定,方法名称被强调。在你的情况下,.get_equipped_weapon而不是.getEquippedWeapon,或甚至更好.equipped_weapon

无论如何,我敢打赌,如果你提供了更多的代码,你会得到更多的答案。