[Week 15] Nama Saya Adalah…

Jonathan Prasetya
LapakLaut
Published in
3 min readMay 15, 2018

Pada aplikasi LapakLaut, identitas unik tiap pengguna diambil dari ID unik perangkat yang digunakan. Namun antar pengguna tidak dapat saling mengenali jika hanya menggunakan ID unik perangkat. Sebagai ‘pengenal’, setiap user dapat menentukan nama yang akan ditampilkan.

Pada awal penggunaan, aplikasi LapakLaut akan mengarahkan pengguna untuk menentukan nama yang akan ditampilkan sebagai dirinya nanti. Jika nama pengguna belum pernah di-set, maka muncul komponen Modal dari React Native yang meminta pengguna untuk mengisi namanya.

Modal untuk mengisi nama pengguna

Nama pengguna ini digunakan saat bertukar pesan (chat) dan juga sebagai nama penjual.

tampilan nama di ruang pesan (chat)
tampilan nama sebagai penjual pada halaman detail produk

Error Handling pada Firebase JavaScript SDK

error handling akan lebih sederhana jika menggunakan Promise pada firebase JS SDK. Promise adalah alternatif untuk callback. Mereka meningkatkan readability, menyederhanakan error handling, dan memisahkan tugas ke dalam unit-unit. Promise adalah tugas yang mungkin belum selesai. Ketika sebuah tugas Promise selesai dengan sukses, Promise itu “fulfilled”, jika tidak, “ rejected.” Promise dijalankan dengan memanggil metode then dengan callback yang harus dijalankan juga ketika Promise itu dipenuhi atau ditolak.

var articleRef = ref.child('blogposts').child(id);
articleRef.once('value', function(article) {

// The first callback succeeded; go to the second.
articleRef.child('readCount').transaction(function(current) {
// Increment readCount by 1, or set to 1 if it was undefined before.
return (current || 0) + 1;
}, function(error, committed, snapshot) {
if (error) {

// The fetch succeeded, but the update failed.
console.error(error);
} else {
renderBlog({
article: article.val(),
readCount: snapshot.val()
});
}
});
}, function(error) {

// The fetch failed.
console.error(error);
});

Dari kode diatas, error handling ada di banyak tempat. Setiap subtugas menyebabkan indentasi semakin dalam. Versi Promise dari kode diatas lebih pendek, indentasinya lebih sederhana, dan tidak khawatir tentang error handling hingga di akhir:

var article;
var articleRef = ref.child('blogposts').child(id);
articleRef.once('value').then(function(snapshot) {

// The first promise succeeded. Save snapshot for later.
article = snapshot.val();
// By returning a Promise, we know the function passed to "then" below
// will execute after the transaction finishes.
return articleRef.child('readCount').transaction(function(current) {
// Increment readCount by 1, or set to 1 if it was undefined before.
return (current || 0) + 1;
});
}).then(function(readCountTxn) {

// All promises succeeded.
renderBlog({
article: article,
readCount: readCountTxn.snapshot.val()
});
}, function(error) {

// Something went wrong.
console.error(error);
});

Ketika Promise dilanjutkan dengan then, kita dapat mengabaikan error handling sampai benar-benar siap untuk mengatasinya. Promise bertindak seperti try/catch block yang asynchronous. Promise yang ditolak lalu ditangani dengan meneruskan fungsi kedua untuk itu. Fungsi kedua itu yang dipanggil, bukan fungsi pertama jika Promise ditolak. Jika fungsi kedua tidak disampaikan untuk then, fungsi pertama tidak dipanggil dan Promise yang dikembalikan oleh then ditolak dengan kesalahan yang sama dengan yang Promise sebelumnya yang ditolak.

Mengenai Software Architecture

Software architecture yang digunakan dalam proyek kami adalah Monolitik. Monolitik dalam konteks ini, berarti semua disusun secara utuh. Arstitektur monolitik adalah software yang user interface dan akses datanya berada di satu tempat. Perangkat lunak monolitik dirancang untuk mandiri. Komponen dari program ini saling berhubungan dan saling bergantung, tidak digabungkan seperti halnya program perangkat lunak modular.

Karena antar komponen saling bergantung, jika ada komponen program yang harus diperbarui, ada kemungkinan seluruh aplikasi ditulis ulang. Sedangkan dalam aplikasi modular, setiap modul terpisah (seperti microservice) dapat diubah tanpa mempengaruhi bagian lain dari program.

Tetapi manfaat dari arsitektur monolitik. Program monolitik biasanya memiliki throughput yang lebih baik daripada pendekatan modular, seperti microservice architecture(MSA). Test dan debug dapat lebih mudah untuk dilakukan karena dengan lebih sedikit elemen, maka lebih sedikit variabel yang ikut diperhatikan.

--

--