【发布时间】:2012-12-04 22:10:21
【问题描述】:
我有一个由几个模块组成的游戏。
其中之一是数据库模块。 我想把它变成这样:
Database{
public:
save(&Object); //all my classes in the all modules inherit from Object
load(&Object);
};
使该模块独立于其他模块的最佳方法是什么(其他模块将使用save和load函数将数据存储在Database中)?
我考虑了几个解决方案:
- 所有对象都有类似
serialize()的方法,该方法继承自Object类(类似于Java)。Database使用该方法获取字符串并保存。明显的缺点是:所有对象都必须实现新方法,并且保存字符串不是最佳选择(不知道类的结构)。 - 为所有类制作“清单”(例如,在将发送到
Database的文本文件中)。该清单将描述类的结构是什么(例如,一个字符串、两个双精度、一个罕见使用的 int)。缺点是灵活性 - 更改其他模块中的类会影响清单。 - 所有类都有自己的
save和load方法,Database使用它们。我不想要它,因为所有类都必须知道数据库类型,save和load应该在Database类中,而不是分布在整个代码中(这是制作这样一个模块的重点) . -
Database知道所有其他模块(并且会知道如何保存所有对象)。这里的坏事是很多依赖。任何模块的更改都会影响Database。
哪种方式好?或者也许有更好的选择?
【问题讨论】:
-
当您谈论 serialize() 方法时,听起来您想使用名称值存储(ala NoSQL)。通常,数据库会在表中的每列存储一个值。
标签: c++ database module dependencies