2011-01-16 14 views
0

Hey Leute, ich erstelle ein Browserspiel, in dem Kämpfe zwischen Monstern und Benutzern (PvP) stattfinden. Das Monster-Modell hat alle Funktionen, die sich auf den Kampf gegen Monster beziehen. Ich erschaffe jetzt das PvP-System und das Kampfsystem ist das Gleiche wie bei Monstern. Also dachte ich daran, eine Art abstrakte Darstellung des Kampfes zu erstellen, vielleicht ein Combatable Model (?) Und eine polymorphe Assoziation herzustellen.Ist polymorph die beste Wahl?

Denken Sie, dass dies die Strategie ist, der ich folgen sollte, oder könnte ich es besser machen?

+1

Wenn es das gleiche Kampfsystem ist, sollte man den gleichen Code verwenden, um sie auszuführen. Es ist nicht nötig, den gleichen Code neu zu erfinden oder ihn zu kopieren und einzufügen und ihn an zwei Stellen zu pflegen, das bedeutet nur mehr Fehler. – ewanm89

+0

Sie haben meine Frage nicht verstanden. Natürlich ist der Code derselbe, aber er liegt im Monster-Modell, weil er sich auf Monster bezieht. Ich würde keinen Monster-Modell-Aufruf für PvP-Kämpfe verwenden wollen. – Spyros

+0

lernen OOP, das ist, was Vererbung ist. Es sollte nicht im Monstor-Modul sein, sondern nur in einem generischen, gemeinsamen. – ewanm89

Antwort

1

Ich würde sagen, dass Sie eine Combatant-Klasse oder -Modul erstellen sollten, die Sie von Ihrer Person- und Monsterklasse erben oder in diese einbeziehen können, aber Sie sollten keine polymorphe Assoziation in der Datenbank beibehalten. Sie sollten nur zwei Tabellen verwenden: Menschen und Monster.

 
module Combatant 
... 
end 

class Person < ActiveRecord::Base 
    include Combatant 
    ... 
end 

class Monster < ActiveRecord::Base 
    include Combatant 
    ... 
end 
+1

Ich muss zugeben, dass das klingt wie der Weg zu gehen. Tatsächlich möchte ich nur ein Monster und ein Personenmodell. Danke von einem Griechen, einem anderen Griechen;) – Spyros

0

Eine weitere Option ist Single Table Inheritance

class Combatant < ActiveRecord::Base 
    # Has all the fields we care about and basic damage rules, etc 
end 

class Person < Combatant 
    # Any functions that only players can do 
end 

class Monster < Combatant 
    # any functions that need to be overridden 
end 
Verwandte Themen