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