2011-01-28 159 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

無論如何,我敢打賭,如果你提供了更多的代碼,你會得到更多的答案。