King of Realm — Simplificando a alteração de objetos

Image for post
Image for post

Fala galera,

Um dos meus primeiros artigos do Medium foi sobre Realm e ate hoje eu continuo com a ideia Xamarin.Forms + Realm = ❤.

Alguns meses atras fiz uma palestra sobre Persistência de dados e falei bastante sobre o Realm , inclusive disse que existem formas de facilitar seu uso.

Hoje vou dar algumas dicas para facilitar o uso do mesmo e deixar você o Rei do Realm

Lembrando que existem muitas formas de se usar o realm, esta é apenas uma para facilitar.. Bora!

Realm é fácil de usar e rápido de configurar.

Diferente do SQLite, não é um banco de dados relacional, mas sim um banco de dados com objetos. Você armazena seus objetos “diretamente” no banco de dados em vez de passar por uma camada ORM ou algum tipo de serialização.

Porem, como o Realm trabalha de forma diferente , ele utiliza um conceito próprio que de inicio pode parecer complicado na hora de alterar um objeto.

Todos os objetos devem herdar de RealmObject, com isto o Realm sabe qual objeto pertence a cada Thread , assim como seu estado.

Como eu disse ,quando você carrega um registro do banco de dados do Realm, você está realmente carregando um objeto. E obrigatoriamente se você quer fazer alguma alteração nesse objeto, devera de usar uma transação não importando como quer usar. Exemplo:

Ai que entra a "treta", para você editar ou realizar qualquer alteração nas propriedades do objeto, vai precisar fazer uma configuração personalizada ou uma copia do objeto para altera-lo diretamente. Ou vai receber a famoso: "Realm access from incorrect thread"

Acredite eu amo Realm ❤ e sempre utilizo ele, mas em algumas situações pode ser bem chato alterar o objeto.

Vou ensinar uma forma que utilizo para manipular e alterar os objetos do Realm. Novamente digo que devem existem outras, mas essa tem funcionado bem para mim , então porque não compartilhar ? :D

O Herói : Transaction.

Basicamente existe um outro meio de alterar um objeto Realm , é utilizando o BeginWrite () para retornar a transação, Commit () para confirmar ou Dispose () para reverter as alterações.

Certo mas qual a diferença de uso da exibida acima? É simples, a questão não é "como" usar e sim "Onde" usar :D

Acreditando que você esta trabalhando com MVVM ( ou você deve sofrer uma morte lenta e dolorosa :P ) , podemos criar a transação ao navegar para nossa view.

Por exemplo, imagine uma aplicativo de Todo-list. Aqui temos nossa lista carregada com os objetos do Realm :

Image for post
Image for post

Então precisamos alterar nosso objeto na tela de edição. É ai que entra o "onde" utilizar o Realm.

Ao abrir a View devemos iniciar a transação do Realm :

Em seguida podemos obter o objeto , ou por um id ou pelo campo que você quiser :

Pronto! a partir de agora, você pode fazer o que quiser com esse objeto na sua ViewModel, sem se preocupar com os erros de Thread do Realm.

O que apenas se deve prestar atenção é que ao retornar para a View Anterior devemos cancelar ou efetuar o commit na transação, de acordo com a ação do usuario :

A ideia é simples não ?

O que temos que entender é que por ser um banco local, não temos que nos preocupar com a transação aberta enquanto o usuário não sair da View. Não tem mais ninguém usando :)

Vamos resumir o que foi feito ate aqui, para ficar facil o entendimento:

1 — Ao iniciar a ViewModel instanciamos o objeto do Realm , criamos um objeto de transação para controle futuro e iniciamos a transação do Realm .

2 — Quando o usuário terminar suas alterações e clicar no famoso salvar nós efetuamos o Commit com _transaction.Commit().

3 — Quando o usuário sair da View efetuamos o _transaction.Dispose(), isso serve tanto para cancelar , caso você não tenha efetuado o commit , como parar liberar o objeto da memória.

Em Resumo :

Garanto que assim você vai poder alterar objetos no Realm com mais facilidade ,alem de poder salvar ou descartar todas as suas alterações a hora que quiser.

Caso queira baixar o código utilizado no Exemplo: Clique aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Espero ter ajudado!

Aquele abraço!

Written by

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store