Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

modelo de objetos - C++ SDK

Nesta página

  • Tipos de objetos e esquemas
  • Esquema do reconhecimento de data center
  • modelo de objetos
  • Esquema de objetos
  • Definir um novo tipo de objeto
  • Especificar uma chave primária
  • Ignorar uma propriedade
  • Definir um Objeto Embarcado
  • Definir um objeto assimétrico

Os aplicativos Atlas Device SDK modelam os dados como objetos compostos de pares campo-valor, cada um contendo um ou mais tipos de dados suportados .

Cada objeto de banco de dados tem um tipo de objeto que se refere à classe do objeto. Objetos do mesmo tipo compartilham umesquema de objeto que define as propriedades e relacionamentos desses objetos.

Um reconhecimento de data center schema é uma lista de esquema de objetos válidos que o reconhecimento de data center pode conter. Cada objeto de reconhecimento de data center deve estar em conformidade com um Tipo de objeto de Realm incluído no esquema do reconhecimento de data center.

Ao abrir um banco de dados, você deve especificar quais modelos estão disponíveis passando os modelos para o modelo que você usa para abrir o banco de dados. Esses modelos devem ter esquemas, e essa lista de esquemas se torna o esquema do reconhecimento de data center.

Se o reconhecimento de data center já contiver dados quando você abri-lo, o SDK validará cada objeto para garantir que um esquema de objetos tenha sido fornecido para seu tipo e que atenda a todas as restrições especificadas no esquema.

Para obter mais informações sobre como abrir o reconhecimento de data center, consulte Configurar e abrir um Realm - C++ SDK

Seu Realm Object Model é a estrutura principal que fornece ao reconhecimento de data center informações sobre como interpretar e armazenar os objeto em seu aplicativo. O Realm Object Model do C++ SDK é uma classe C++ normal ou uma estrutura que contém uma collection de propriedade. As propriedades que você deseja persistir devem utilizar tipos de dados suportados. As propriedade também são o mecanismo para estabelecer relacionamento entre Tipo de objeto de Realm.

Ao definir sua classe ou estrutura C++, você também deve fornecer um esquema de objeto. O esquema é uma macro C++ que fornece ao SDK informações sobre qual propriedade persistir e que tipo de objeto de reconhecimento de data center é.

Você deve definir seu modelo de objeto do SDK dentro do namespace realm .

Um C++ SDK esquema de objetos mapeia propriedade para um Tipo de objeto de Realm específico. Os esquemas do SDK são macros que fornecem ao SDK as informações necessárias para armazenar e recuperar os objetos. Um esquema deve acompanhar cada modelo de objeto que você deseja persistir, e pode ser um dos seguintes:

  • REALM_SCHEMA

  • REALM_EMBEDDED_SCHEMA

  • REALM_ASYMMETRIC_SCHEMA

Você deve definir o esquema e seu Realm Object Model dentro do namespace do realm .

No C++ SDK, você pode definir seus modelos como estruturas ou classes C++ regulares. Forneça a um esquema de objetos o nome do tipo de objeto e os nomes de quaisquer propriedades que você deseja manter no banco de dados. Quando você adiciona o objeto ao banco de dados, o SDK ignora todas as propriedades que você omite do esquema.

Você deve declarar seu objeto e o esquema dentro do namespace realm . Em seguida, você deve usar o namespace realm ao inicializar e executar operações CRUD com o objeto.

namespace realm {
struct Dog {
std::string name;
int64_t age;
};
REALM_SCHEMA(Dog, name, age)
struct Person {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age;
// Create relationships by pointing an Object field to another struct or class
Dog *dog;
};
REALM_SCHEMA(Person, _id, name, age, dog)
} // namespace realm

Observação

Os nomes das classes têm um limite máximo de 57 caracteres UTF-8.

Você pode designar uma propriedade como chave primária do seu objeto.

As chaves primárias permitem encontrar, atualizar e upsert objetos de forma eficiente.

As chaves primárias estão sujeitas às seguintes limitações:

  • Você pode definir apenas uma chave primária por modelo de objeto.

  • Os valores de chave primária devem ser únicos em todas as instâncias de um objeto no reconhecimento de data center. O C++ SDK apresenta um erro se você tentar inserir um valor de chave primária duplicado.

  • Os valores de chave primária são imutáveis. Para alterar o valor da chave primária de um objeto, você deve excluir o objeto original e inserir um novo objeto com um valor de chave primária diferente.

  • Objeto incorporado não pode definir uma chave primária.

Se você estiver usando o Device Sync , seus modelos deverão ter uma chave primária chamada _id .

O C++ SDK oferece suporte a chave primária dos seguintes tipos e suas variantes opcionais:

  • int64_t

  • realm::object_id

  • realm::uuid

  • std::string

Além disso, uma propriedade realm::enum obrigatória pode ser uma chave primária, mas realm::enum não pode ser opcional se for usada como chave primária.

Defina uma propriedade como uma chave primária com o modelo primary_key :

struct Person {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age;
// Create relationships by pointing an Object field to another struct or class
Dog *dog;
};
REALM_SCHEMA(Person, _id, name, age, dog)

Seu modelo pode incluir propriedades que o banco de dados não armazena.

O banco de dados ignora todas as propriedades não incluídas no Esquema de objetos.

namespace realm {
struct Employee {
realm::primary_key<int64_t> _id;
std::string firstName;
std::string lastName;
// You can use this property as you would any other member
// Omitting it from the schema means the SDK ignores it
std::string jobTitle_notPersisted;
};
// The REALM_SCHEMA omits the `jobTitle_notPersisted` property
// The SDK does not store and cannot retrieve a value for this property
REALM_SCHEMA(Employee, _id, firstName, lastName)
} // namespace realm

Um objeto embarcado é um tipo especial de objeto que modela dados complexos a respeito de um objeto específico. Os objetos embarcados são como relacionamentos, mas fornecem restrições adicionais e correspondem de forma mais natural ao "desnormalizado"MongoDB document model do .

O C++ SDK impõe restrições de propriedade exclusivas que tratam cada objeto incorporado como dados aninhados dentro de um único objeto específico. Um objeto incorporado herda o ciclo de vida de seu objeto pai e não pode existir como um reconhecimento de data center independente. O SDK exclui automaticamente os objetos incorporados se o objeto principal for excluído ou quando for substituído por uma nova instância de objeto incorporado.

Você pode declarar um objeto como um objeto embarcado que não tem um ciclo de vida independente do objeto no qual está embarcado. Isso difere de um relacionamento para-um ou para-muitos , no qual os objetos relacionados têm ciclos de vida independentes.

Forneça um REALM_EMBEDDED_SCHEMA com o nome da estrutura ou classe e os nomes de quaisquer propriedade que você deseja que o reconhecimento de data center persista.

Defina uma propriedade como um objeto incorporado no objeto principal definindo um ponteiro para o tipo de objeto incorporado.

namespace realm {
struct ContactDetails {
// Because ContactDetails is an embedded object, it cannot have its own _id
// It does not have a lifecycle outside of the top-level object
std::string emailAddress;
std::string phoneNumber;
};
REALM_EMBEDDED_SCHEMA(ContactDetails, emailAddress, phoneNumber)
struct Business {
realm::object_id _id;
std::string name;
ContactDetails *contactDetails;
};
REALM_SCHEMA(Business, _id, name, contactDetails)
} // namespace realm

Você pode usar o ingestão de dados para sincronizar um objeto unidirecionalmente do seu dispositivo para o banco de dados vinculado ao seu aplicativo Atlas App Services.

Um asymmetric_object amplamente tem os mesmos tipos suportados que o realm::object , com algumas exceções:

  • Objeto assimétricos podem ser vinculados aos seguintes tipos: - object - embedded_object - std::vector<embedded_object>

Objeto assimétricos não funcionam da mesma maneira que outros objeto do reconhecimento de data center. Você não pode:

  • Remover um objeto assimétrico do reconhecimento de data center do dispositivo

  • Query um objeto assimétrico do reconhecimento de data center do dispositivo

Você só pode criar um objeto Asymmetric, que é sincronizado unidirecionalmente com o banco de dados do Atlas vinculado ao seu aplicativo com o Device Sync.

Para obter mais informações, consulte: Criar um objeto assimétrico.

No C++ SDK, defina um objeto assimétrico da mesma forma que você definiria uma estrutura ou classe C++ regular. Forneça um REALM_ASYMMETRIC_SCHEMA com o nome da estrutura ou classe e os nomes de qualquer propriedade que você deseja que o reconhecimento de data center persista.

struct WeatherSensorReading {
realm::primary_key<realm::object_id> _id{realm::object_id::generate()};
std::string deviceId;
double temperatureInFahrenheit;
int64_t windSpeedInMph;
};
REALM_ASYMMETRIC_SCHEMA(WeatherSensorReading, _id, deviceId,
temperatureInFahrenheit, windSpeedInMph)

Voltar

Dados do modelo

Próximo

Tipos de dados suportados