COM DLL Akses MySQL – Bagian 4: Membuat Operasi CRUD Untuk Tabel Mahasiswa


Tulisan ini merupakan bagian dari panduan membuat COM DLL (ATL) di Visual Studio 2010 yang mengakses MySQL atas request Albert Antonius:

Pada artikel sebelumnya, kamu sudah membuat operasi insert ke tabel melalui Connector/C++ di COM ATL.  Kali ini, kamu akan membuat sebuah proyek baru yang menyediakan operasi CRUD (Create, Read, Update, Delete) untuk tabel Mahasiswa tersebut.  Kamu juga akan memakai cara yang lebih OOP dibandingkan dengan cara kemarin.  “Apa bedanya? Yang penting ‘kan sama2 bisa jalan?”  tanyamu.   Meningkatkan kualitas kode program, mempermudah perawatan dan perubahan, memudahkan seseorang memahami kode program.

Seperti apa rancangan program yang akan kamu buat?  Kata-kata akan sulit menjelaskannya, jadi lebih baik kamu melihat Component Diagram-nya sendiri:

Component Diagram

Component Diagram

Pada diagram di atas, terlihat bahwa DLL kita mengandung dua class, masing-masing dengan ProgID Jocki.Mahasiswa dan Jocki.MahasiswaService.  PHP akan berinteraksi dengan Jocki.MahasiswaService melalui interface IDispatch.   “Lalu buat apa Jocki.MahasiswaService menyediakan bulat-bulat (baca: provided interface) bernama IMahasiswaService yang tidak pernah dipakai?” kamu pasti bertanya demikian.  Pada komunikasi yang ideal, kamu akan memakai interface ini.  Sayangnya, bila kamu ingin memakai COM di bahasa seperti VB & PHP, maka kamu harus menyediakan IDispatch, karena itulah satu-satunya harapan mereka.  Bila misalnya, suatu saat nanti,  kamu membuat client di Visual C++, maka IMahasiswaService ini akan terpakai.  Kamu tidak perlu khawatir takut kerepotan karena selama ini Visual C++ ATL telah membuatkan dua interface ini secara otomatis bagi kita.

Kembali ke diagram di atas, class Jocki.MahasiswaService akan memakai class lain yaitu Jocki.Mahasiswa.  Walaupun class ini menyediakan IDispatch, pengguna tidak seharusnya membuat class ini langsung dari PHP, karena tujuan utama class ini adalah dipakai oleh Jocki.MahasiswaService.  “Kenapa harus repot-repot membuat dua class?  Bukankah selama ini semua contoh selalu hanya satu class saja?”  demikian pikirmu.  Ini berkaitan dengan bagaimana mengembalikan isi tabel ke klien PHP.   Saat PHP memanggil getAllMahasiswa (ini hanya contoh!), kamu harus mengembalikan daftar list yang berisi … ?  array? Ok, tapi pengguna PHP harus ingat urutan index di array, misalnya index 0 adalah NIM, index 1 adalah nama, dan sebagainya.   Apa tidak ada cara lain yang lebih rapi sedikit?  Yup, itu sebabnya kita mengembalikan class Jocki.Mahasiswa.

Sekarang kamu akan merancang secara lebih detail lagi.  Coba lihat class diagram berikut ini:

Class Diagram MahasiswaService

Class Diagram MahasiswaService

CMahasiswaService adalah class yang mengimplementasikan IMahasiswaService.   Hierarki ini secara otomatis sudah dibuat oleh Visual C++ pada saat kamu wizard new ATL Simple Object.

Method Inisialisasi() akan dipakai untuk melakukan koneksi database.  Pengguna harus menyertakan user database, password, serta nama database yang dipakai saat memanggil method ini.   Bila method lain dipanggil sebelum method ini, maka method lain akan mengembalikan nilai kesalahan.  Pada perancangan yang lebih baik, kamu bisa menyediakan nilai default untuk user, password, dan nama db.  Lalu setiap kali method lain dipanggil dan ternyata koneksi belum dibuat, maka method Inisialiasi() akan dikerjakan dengan nilai default tersebut.

Selain melakukan koneksi database, method Inisialisasi juga akan menyiapkan PreparedStatement yang dibutuhkan.  PreparedStatement adalah class dari Connector/CPP untuk men-cache statement SQL sehingga pemanggilan query yang sama akan lebih cepat nantinya.  Selain itu, PreparedStatement akan mencegah terjadinya SQL Injection.  Pada diagram di atas, saya membuat beberapa PreparedStatement seperti psInsert, psUpdate, psDelete, psSelectByNIM, dan psSelectAll.

Setelah melakukan inisialisasi PreparedStatement, method Inisialisasi() juga akan melakukan query untuk mendapatkan seluruh isi tabel Mahasiswa melalui method Refresh() guna dipakai oleh _NewEnum() dan Item() nantinya.    Pada kasus yang lebih realistis dimana isi tabel mahasiswa sangat banyak sekali, kamu seharusnya hanya perlu men-select hanya bagian tertentu saja pada satu waktu tertentu, tidak semuanya sekaligus.

Setelah select seluruh data dilakukan pertama kali saat method Inisialisasi() dipanggil, mungkin saja user akan melakukan perubahan, seperti setelah pemanggilan HapusMahasiswa() atau SimpanMahasiswa().  Hal ini menyebabkan hasil query pertama kali menjadi tidak valid lagi.  Oleh sebab itu, user wajib memanggil method Refresh() untuk memperbaharui query.  Pada design yang lebih realistis, kamu perlu melakukan caching dan melakuan refresh secara otomatis sehingga user tidak perlu repot.

Method SimpanMahasiswa() akan dipakai untuk insert dan update.  Bila nim mahasiswa belum ada di tabel, maka program harus menambah (insert) record baru.  Tetapi bila nim sudah ada di tabel, maka program tinggal mengubah (update) record yang sudah ada.

Method HapusMahasiswa() dipakai untuk menghapus record berdasarkan nim.

“Lalu apa itu _NewEnum()?  Sungguh nama method yang aneh,” kamu bertanya dalam hati.  Ini adalah method spesial yang memungkinkan kamu memakai class kamu di PHP dengan syntax seperti berikut ini:

<?php
  $com = new COM("Jocki.MahasiswaService");
  foreach ($com as $i) {
     ...
  }
?>

“Pasti Item() juga pasti ada kaitannya?” tanyamu.  Iya, benar.  Item()memungkinkan kode program di PHP seperti berikut ini:

<?php
  $com = new COM("Jocki.MahasiswaService");
  $data1 = $com[1];
  $data2 = $com[2];
  $data3 = $com[3];
?>

Pada contoh di atas, kamu dapat melakukan perulangan setiap record yang ada dengan foreach di PHP berkat _NewEnum() dan kamu bisa mengakses record sebagai array berkat Item().   O ya, kamu tidak perlu membuat kode proram untuk kedua-duanya, karena kamu akan memakai class bawaan ATL yang bernama CComEnumOnSTL.

Berikutnya, seperti apa isi Jocki.Mahasiswa?  Coba perhatikan class diagram berikut ini:

Class Diagram Mahasiswa

Class Diagram Mahasiswa

Class CMahasiswa hanyalah class sederhana yang berisi property sehingga program PHP dapat mengakses setiap record di tabel mahasiswa seperti berikut ini:

<?php
  $com = new COM("Jocki.MahasiswaService");
  print "<h1>Daftar Mahasiswa</h1>";
  for($com as $mhs) {
    // tanpa class Mahasiswa, misalnya dengan array, akan menjadi: 
    // $mhs[0] untuk NIM, $mhs[1] untuk Nama, dsb.
    print "NIM: " . $mhs->NIM . "<br>";
    print "Nama: " . $mhs->Nama . "<br>";
    print "Tahun Masuk: " . $mhs->TahunMasuk . "<br>";
    print "<hr>";
  }
?>

Ok, setelah melihat dan memahami perancangan COM latihan kita, pada artikel berikutnya, kamu akan  membuat implementasinya.

Perihal Solid Snake
I'm nothing...

5 Responses to COM DLL Akses MySQL – Bagian 4: Membuat Operasi CRUD Untuk Tabel Mahasiswa

  1. Ping-balik: COM DLL Akses MySQL – Bagian 5: Implementasi Kode Program « The Solid Snake

  2. Ping-balik: COM DLL Akses MySQL – Bagian 3: Operasi Database Insert « The Solid Snake

  3. Ping-balik: COM DLL Akses MySQL – Bagian 2: Membuat Project di Visual Studio 2010 « The Solid Snake

  4. Ping-balik: COM DLL Akses MySQL – Bagian 1: Membuat Library « The Solid Snake

  5. ciburuan mengatakan:

    Sangat menarik sekali isinya. Bisa menjadi referensi nih.
    Terima kasih ya ilmunya

Apa komentar Anda?

Please log in using one of these methods to post your comment:

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

%d blogger menyukai ini: