! | Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам) |
Эти объекты это вариант http://en.wikipedia.org/wiki/Active_record_pattern
CDb классы декларируют таблицы (см. там требования к их декларации) и унаследованы от dbobject.
Экземпляры создаются как обычные ref<CDbXxxx>.
Рабочий экземпляр такого объекта может быть получен либо от итератора запроса к Udb, либо от dbref::QueryRef(), либо инициализирован dblist::AddNewRow().
После изменения пропертей сразу же всегда нужно вызвать метод CommitRef() для сохранения изменений в БД.
Если в приложении существует несколько rDb ссылок на одну и ту же запись в БД, то при изменении в одной из них остальные могут обновится автоматически. А могут и не обновится.
Такое обновление может произойти в момент присваивания проперти, или при вызове CommitRef() или позже при выполнении других операций в Udb, по Idle или в неопределенный момент в будущем. Или такое обновление может не происходить вообще и каждый экземлпяр хранить свою версию пропертей. Конкретное поведение зависит от драйвера бакенда и версии Udb.
Использование таких объектов должно быть исключительно приватным в пакете, инкапсулирующим реляционное хранилище.
При использовании хранилища извне обычно необходимо декларировать отдельную пару Iface/Impl классов, скрывающих в себе CDb рекорды:
// For the frontend class CThingIface : public object { public: // visible to the client int x_nProperty_Get() void x_nProperty_Set(...) } // In DB encap package class CThingImpl : public CThingIface { // db record is hidden from the client ref<CDbThing> x_rDbThing int Onx_nProperty_Get() void Onx_nProperty_Set(...) } int CThingImpl::Onx_nProperty_Get() { return x_rDbThing->x_nThingProperty; } void CThingImpl::Onx_nProperty_Set(...) { x_rDbThing->x_nThingProperty = ...; // save to db immediatelly! x_rDbThing->Commit(); }
Эта категория в данный момент пуста.