Issue 157: which classes do we need?

http://cardforge.org/bugz/view.php?id=157
I completely agree that using a single class for every possible card representation is a Door To Nothingness. So, let's figure out, which classes are needed for each purpose. At the moment, we have two methods of representing a card: an instance of Card and a String with name. The latter being used for deck and card pool management and the former for everyting else.
To my opinion three "levels of detail" for Card class are needed:
1. CardReference - contains only name, edition, picture number and foiled flag. This is useful to store cards owned by player, be it questmode cardpool or a deck. Picture number is good for distinguishing different copies of lands and promos from ordinary cards.
2. CardOutOfGame (or simply Card) - contains all the rules and abilities, but has no temporary effects on it. This class is useful for displaying cards as quest rewards or in deckbuilder GUI. Such cards instances do have enough properties to filter them by having some ability (infect for instance) or sort by cmc. Their PT and other properties are always nominal and no game-related effects may be placed on these cards. One instance of each card of this type per application is enough. [These cards may persist for the whole app runtime]
3. CardInGame - has a reference to CardOutOfGame (it's prototype), but this card can be placed to any zone in game, can have counters placed over it as well as other effects, can have changed P/T, color, types and so on. [These objects are disposed as soon as game ends]
I completely agree that using a single class for every possible card representation is a Door To Nothingness. So, let's figure out, which classes are needed for each purpose. At the moment, we have two methods of representing a card: an instance of Card and a String with name. The latter being used for deck and card pool management and the former for everyting else.
To my opinion three "levels of detail" for Card class are needed:
1. CardReference - contains only name, edition, picture number and foiled flag. This is useful to store cards owned by player, be it questmode cardpool or a deck. Picture number is good for distinguishing different copies of lands and promos from ordinary cards.
2. CardOutOfGame (or simply Card) - contains all the rules and abilities, but has no temporary effects on it. This class is useful for displaying cards as quest rewards or in deckbuilder GUI. Such cards instances do have enough properties to filter them by having some ability (infect for instance) or sort by cmc. Their PT and other properties are always nominal and no game-related effects may be placed on these cards. One instance of each card of this type per application is enough. [These cards may persist for the whole app runtime]
3. CardInGame - has a reference to CardOutOfGame (it's prototype), but this card can be placed to any zone in game, can have counters placed over it as well as other effects, can have changed P/T, color, types and so on. [These objects are disposed as soon as game ends]