这听起来像是一种可用的方法,但是它是否是一个好的方法是值得怀疑的。
为什么不从数据库中的卡片表示构造propper 对象?要么使用对象数据库,要么更可能的是使用对象关系映射。通过这种方式,您可以以一种干净、易于阅读和使用的方式表示每种类型的卡片,同时还可以使用从公共基类派生的专用类的丰富实例。
因此,您使用一个公共表来存储所有卡片,如下所示:
+-------------------------------------------------+
| card type | data1 | data2 | data3 | ... | dataN |
+-------------------------------------------------+
| Card | 123 | 456 | 789 | ... | abc |
| CardS1 | 123 | 456 | 789 | ... | abc |
| CardS3 | 123 | 456 | 789 | ... | abc |
| CardS2 | 123 | 456 | 789 | ... | abc |
...
像这样的类层次结构:
+---------------------------+
| class Card |>-+
+---------------------------+ |
| var data1 | |
| var data2 | |
| var data3 | |
| ... | |
| var dataN | |
| baseMethod1() | |
| baseMethod2() | |
+---------------------------+ |
|
+---------------------------+ |
| class CardS1. public Card |<-+
+---------------------------+ |
| specialMethod_1_1() | |
+---------------------------+ |
|
+---------------------------+ |
| class CardS2. public Card |<-+
+---------------------------+ |
| specialMethod_2_1() | |
| specialMethod_2_2() | |
+---------------------------+ |
|
+---------------------------+ |
| class CardS3. public Card |<-+
+---------------------------+
| specialMethod_3_1() |
+---------------------------+