Pengenalan Data Access Object {5} Kesalahan Membuat DAO


jika anda membaca artikel ini berarti anda telah membaca artikel-artikel sebelumnya, dari :

pada artikel ini saya akan membahas tentang kesalahan dalam membuat dao, biasanya ini sering terjadi jika seseorang baru belajar dao. maka dari itu penting sekali diperhatikan jika anda baru belajar dao

jika diperhatikan tidak ada yang salah dengan contoh-contoh dao yang pada artikel sebelumnya? yup memang tidak ada yang salah. namun dalam keadaan tertentu akan menjadi sangat fatal jika dao tersebut di gunakan. maksudnya?

coba kita perhatikan pada contoh-contoh dao pada artikel sebelumnya…

setiap metode dao merupakan metode yang bersifat TRANSAKSI, yup setiap proses pada metode tersebut merupakan proses TRANSAKSI. lantas bagaimana jika kita mendapatkan kasus yang harus menggunakan banyak proses DAO namun proses tersebut harus DAO. contohnya…

misal kita memiliki kasus sistem perpustakaan yang memiliki Buku dan Peminjaman, sehingga dibuat dao seperti dibawah ini :

public interface BukuDao{

	void simpanBuku(Buku buku);
	
	void ubahStatusBuku(Buku, boolean dipinjam);	
	
	void ...
	
}

public interface PeminjamanDao{

	void simpanPeminjaman(Peminjaman peminjaman);
	
	void ...

}

misal pada saat peminjaman tentunya kita harus menggunakan PeminjamanDao.simpanPeminjaman(…) untuk menyimpan peminjaman dan juga mengubah status buku, bahwa buku tersebut sedang dipinjam menggunakan metode BukuDao.ubahStatusBuku(true), sehingga seperti inilah kodenya :


	Peminjaman peminjaman = ...
	peminjaman.setTanggalPinjam(new Date());
	peminjaman.setPeminjam(anggota);
	peminjaman.setBuku(buku);
	
	// simpan peminjaman
	peminjamanDao.simpanPeminjaman(peminjaman);
	// ubah status buku menjadi dipinjam
	bukuDao.ubahStatusBuku(buku, true);

jika diperhatikan memang tidak ada yang salah 😀 tapi jika dilihat lebih teliti, ini adalah sesuai yang salah 😀 why? mari kita liat lebih dalam pada kedua perintah dibawah ini :


	// simpan peminjaman
	peminjamanDao.simpanPeminjaman(peminjaman);
	// ubah status buku menjadi dipinjam
	bukuDao.ubahStatusBuku(buku, true);

jika dijabarkan, maka hasilnya seperti ini :

	
	// simpan peminjaman
	// peminjamanDao.simpanPeminjaman(peminjaman);
	transaksi.begin();
	koneksi.simpan(peminjaman);	
	transaksi.commit();
	
	// ubah status buku menjadi dipinjam
	// bukuDao.ubahStatusBuku(buku, true);
	transaksi.begin();
	koneksi.ubah(status buku);
	transaksi.commit();

bisa dilihat pada kode diatas terdapat 2 buat transaksi, dimana transaksi pertama adalah transaksi menyimpan penyimpanan dan transaksi kedua adalah transaksi mengubah status buku.

seharusnya hanya boleh terjadi 1 transaksi pada proses peminjaman tersebut, kenapa? bayangkan jika saat menyimpan data peminjaman berhasil namun saat mengubah status buku terjadi error di database sehingga menyebabkan gagalnya proses ubah status tersebut, jika hal ini terjadi, maka proses simpan data peminjaman berhasil, namun status buku masih false (artinya buku tidak dipinjam)

mungkin hal ini sepele, namun bayangkan jika proses transaksi tersebut melibatkan transaksi E’COMMERCE atau transaksi BANK, pastinya kesalahan seperti itu akan menjadi FATAL, seharusnya proses diatas terjadi dalam 1 transaksi, artinya jika salah satu proses gagal, maka proses yang lainnya pun harus digagalkan, sedangkan proses dianggal berhasil jika semua proses berhasil

jadi seharusnya dalam satu proses, jangan sampai memanggil 2 metode DAO, sehingga pada kasus diatas sebaiknya pada proses simpanPeminjaman milik PeminjamanDao, ditambah sebuah query untuk mengubah status buku, sehingga seharusnya seperti ini :


public class PeminjamanDaoImpl implements PeminjamanDao{

	public void simpanPeminjaman(Peminjaman peminjaman){
		transaksi.begin();
		
		koneksi.insert(peminjaman);
		koneksi.ubahStatus(peminjaman.getBuku(), true);
		
		transaksi.commit();
	}

}

mudah-mudahan dengan dibahasnya masalah ini, akan membuat anda terhindar dari masalah yang seperti ini. walaupun masalah ini terlihat sepele, namun ini sangat fatal jika anda membangun sistem informasi yang BESAR 😀

Iklan

5 pemikiran pada “Pengenalan Data Access Object {5} Kesalahan Membuat DAO

  1. Ada yang ku tanyakan nih.. kalau pake tabel yang berelasi entitasnya(query tabel2 yang berelasi) kayak apa model entity-nya mas eko… atau ada konsep lain yang kita minta dibagi nih… thanks…

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s