Здравствуйте, Yagg, Вы писали:
Y>Очень хочется засунуть работу с СУБД в отдельный класс, чтобы основная
Y>работа программы шла только с объектами типа
Y>class Person
Y>{
Y> property<int> id;
Y> property<std::string> name;
Y> ...
Y>};
Например так (memento pattern):
class person
{
public:
// ctors
public:
const uuid& id() const { return variant_cast<uuid&>(memento_["id"]); }
void id(const uuid& u) { memento_["id"] = u; }
string name() const { return variant_cast<string>(memento_["name"]); }
void name(const string& s) { memento_["name"] = s,c_str(); }
private:
typedef map<string, variant> memento;
memento memento_;
};
Должна быть фабрика, которая будет общаться с БД и читать/записывать memento и создавать твои конкретные классы. Так как класс обращается к свом свойствам по символьным именам, запросы к БД должны при необходимости переименовывать столбцы.
Св-ва для удобства можно обернуть в proxy, которые различают запись и чтение.
Y>и не зависела от запросов, таблиц...
Вот чтобы она ни отчего не зависела сделать непросто.