Realm for your Java Mobile App Model and ORM

anab maulana
temancatat
Published in
4 min readMar 21, 2018

Terkadang saat kita mengembangkan aplikasi berbasis android, kita membutuhkan database lokal untuk menyimpan data sementara di device kita masing-masing. Mendengar kata-kata “database” dan “lokal” pada android, pasti kata-kata yang teman-teman pikirkan adalah AndroidSQLite.

Sekarang, bukan hanya AndroidSQLite saja, ada package lain penggati AndroidSQLite, salah satunya adalah Realm.

Realm

Dikutip dari websitenya,

Realm is a mobile platform and a replacement for SQLite & Core Data. Build offline-first, reactive mobile experiences using simple data sync.

Berdasarkan kutipan itu, Realm merupakan platform pengganti SQLite. Realm memberikan beberapa keuntungan yang WAW menurut saya:

  1. Fast Queries. Saya sendiri belum pernah belum pernah meriset tentang hal ini, namun ada sumber yang mengatakan bahwa Realm dapat melakukan 57 queries dalam 1 detik, dimana SQLite biasa hanya 18 perdetik.
Taken from https://qiita.com/moriyaman/items/1a2916f4c2b79e934370

2. Realm Browser. Dengan bantuan stetho yang dibuat oleh facebook, atau mendownload aplikasi Realm Browser, kita dapat memonitor atau mengubah realm data pada aplikasi kita.

Taken from https://static1.squarespace.com/static/53fc4022e4b04305cfdf67b8/t/540ac94ee4b02ecebb634a4c/1409993040962/?format=1500w

3. Simplify your code. Query lebih gampang dan mudah dibaca, serta kita tidak perlu melakukan serialize atau deserialize. Kita dapat melakukan query dengan menggunakan POJO yang sudah di extends RealmObject.

Berikut langkah-langkah untuk menggunakan realm:

Tambahkan Realm

Tambahkan baris ini kedalam gradle project

dan baris ini kedalam gradle app

Init Realm

Inisiasi realm minimal sekali sebelum menggunakan realm pada aplikasi yang di define di AndroidManifest.

Buat Representasi Objek dari Model

Contoh dari representasi objek yang saya buat

Dapat dilihat, dari objek representasi ini mengextends RealmObject agar kita dapat melakukan query dengan model tersebut. Model ini sama seperti kita sebuah tabel di SQL, salah satunya ada primary key (dalam hal ini id). Selain itu, ada anotasi lain yang sangat berguna yang dapat anda lihat di website realm sendiri.

Query dengan Realm

Untuk melakukan query, saya menggunakan executeTransactionAsync() agar transaksi yang dilakukan berjalan pada background proses, dan saya tidak perlu mengimplementasi try catch serta memanggil realm.cancelTransaction() ketika transaksi realm gagal. Disini kita bisa lihat betapa enaknya menulis kodingan realm dibanding dengan SQLite. Ditambah dengan cepatnya realm jadi makin mantep hehe:D.

TESTING!!!

Ini adalah hal terpenting ketika mengembangkan aplikasi mengikuti aturan TDD (Test Driven Development). Loh kalo gitu harusnya ini dilakukan terlebih dahulu dong? YUP. Tepat sekali, namun ada alasan kenapa ini ditaruh paling bawah.

Membuat unit test dengan realm SUSAH (menurut saya, ga tau kalo yang lain).

Seperti yang kita tahu, Realm berjalan ketika aplikasi dijalankan, dengan kata lain untuk menjalankan realm, kita memerlukan emulator. Otomatis, kita tidak dapat melakukan unit test pada realm ini, melainkan dilakukan di instrumented test.

Kenapa tidak di instrumented saja?

Untuk menjalankan instrumented test di CI, kita harus menginstall dan melakukan setup emulator di CI. Saya dan teman saya sudah mencoba melakukan itu, namun belum stabil. Bahkan kita menggunakan GCP untuk membantu melakukan emulasinya, namun ternyata kadang-kadang masih bermasalah, sehingga pada akhirnya kami melepas instrumented test tersebut :(.

Gimana agar tetap menggunakan unit test?

Untungnya ada Robolectric, framework unit testing yang dapat menjalankan test tanpa menggunakan emulator. Banyak kelebihan lain menggunakan robolectric ini, tapi yang paling saya suka adalah tanpa emulator tersebut, sehingga saya dapat melakukan migrasi dari instrumented test menjadi unit test.

Lalu, di website realm sendiri juga memberikan contoh melakukan unit testing realm menggunakan robolectric dan power mockito.

Hasilnya?

Hasil yang saya dapatkan adalahh… Error. Exceptionnya adalah UnsatisfiedLinkError cannot find file://………librealm-ini.so.(maaf tidak ada screenshot nya). Saya sudah mencari-cari bagaimana cara mengatasinya, namun hasilnya nihil :( setelah menemukan pertanyaan di stackoverflow berkaitan dengan ini, yang menyatakan bahwa ada issue di github berkaitan dengan ini masih berstatus open. Pada akhirnya saya menyerah dan tidak melakukan unit testing untuk realm :(.

Kesimpulan

Realm merupakan framework yang keren, banyak kemudahan dan keunggulan yang ditawarkan dibanding dengan framework yang sudah ada, namun masih ada kesulitan untuk membuat unit testing.

Kalau ada dari teman-teman yang bisa membuat unit test untuk realm, bisa dibantu dengan komen dibawah :).

Referensi:

--

--