Fala, galera!
Hoje venho falar um pouco sobre um banco de dados incrível e muito rápido: o Realm.
Realm
Realm é um banco de dados móvel, projetado para o mundo mobile. Ele é uma ótima alternativa ao SQLite, inclusive minha primeira escolha ao invés do SQLite.
Conheci o Realm através de um amigo no trabalho, onde o mesmo utilizou ele com Swift em seu APP iOS. Sim, o Realm não é exclusivo para Xamarin – ele suporta também iOS e Android.
Uma vantagem em cima do SQLite é que não é necessário escrever código específico para cada plataforma para carregar o Realm. Incluindo o pacote via Nuget em todos os projetos está pronto para usar.
Vale a pena? É confiável?
Além de, na minha opinião (e a de todo mundo que usa), ser mais muito mais rápido que o SQLite, ele também é utilizado por algumas “pequenas” (sarcasm = true;) empresas:
É simples de usar?
Um exemplo do próprio site:
É pago? A versão Developer é gratuita.
Outros valores e diferenças de versões você pode consultar neste link.
Mas chega de papo introdutório – vamos colocar a mão na massa e demonstrar um pouco da implementação do Realm.
Vamos criar um projeto Cross-Platform > Blank Xaml App:
Agora, no bom e velho nuget, vamos selecionar o Realm e instalar em todos os projetos:
Certo! Agora o ambiente está montado, mas como o Realm trabalha?
Primeiro, é importante saber q o Realm implementa o IDispose(), ou seja, as instâncias serão fechadas automaticamente (limpas, eliminadas mesmo) quando as variáveis saírem do escopo.
Crie uma pasta Model no projeto (Project > New Folder) e a seguir crie a classe Porco.cs (meus exemplos têm referências com minha vida) conforme mostra a Figura 3.
Estamos usando o namespace “using Realms” para que a classe possa herdar de RealmObject.
Qualquer objeto que você queira criar, basta herdar de RealmObject..
Só existe uma restrição: você só pode usar um objeto na thread na qual ele foi criado, ou seja, você não pode passar o objeto para outra thread, então, cuidado!
Como o Realm trabalha diretamente com objetos, não precisamos de um ORM. Podemos usar Linq!
É possível criar transações de duas formas:
Na figura abaixo vemos um método de uma transação que implementa IDispose, e você tem que dar o commit ou ela será cancelada:
A transação implícita será comitada por padrão:
Para excluir um objeto, basta usar o método Realm.Remove dentro de uma transação:
Para listar basta utilizar o Linq:
Como podem ver, é o bom e velho linq, não tem segredo! Este banco possui uma curva de aprendizado bem simples!
Alguns links úteis:
São exemplos simples, mas da para ter uma ideia de como funciona o Realm. Espero ter ajudado.
Aquele abraço!