Active Record Pattern [Design Pattern Series]


Active Record Pattern adalah sebuah pattern yang memberikan cara bagaimana membaca data dari sebuah database. Active record pattern dinyatakan dalam Patterns of Enterprise Application Architecture yang susun oleh Martin Fowler. Martin fowler mendefinisikan active record pattern adalah “An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data”.

Dalam pemrograman berorientasi objek, sebuah table atau view dari database merupakan sebuah class dan kumpulan record yang ada pada tabel merupakan kumpulan object yang merupakan instance class tersebut.

Ada beberapa cara yang bisa digunakan untuk mendapatkan record database antara lain menggunakan metode ODBC/JDBC, Object Relational Mapping (ORM) dan metode Active Record. JDBC ada standart pengaksesan database yang digunakan pada bahasa java. Sedangkan ODBC digunakan pada bahasa selain java seperti Visual basic, Borland Delphi, C++.

Metode ODBC/JDBC mengambil record-record yang ada pada sebuah table dalam sebuah object yang disebut recordset/rowset. Sebelumnya kita harus mendefinisikan query yang akan digunakan untuk mendapatkan record tersebut. Selanjutnya dengan melakukan looping kita bisa mendapat kumpulan record hasil query. contoh implementasinya dalam visual basic adalah sebagai berikut:

    Dim Cnxn As New ADODB.Connection
    Dim rs As New ADODB.Recordset        

    Set Cnxn = New ADODB.Connection
    strCnxn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=blog.mdb;" &
              "Persist Security Info=False;Jet OLEDB:Database Password=xxx"
    Cnxn.Open strCnxn
    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM Comments", Cnxn, adOpenStatic, adLockReadOnly, adCmdText    

    Do While Not rstTitles.EOF
        rs.Field("name")
	rs.Field("email")
	rs.Field("url")
	rs.Field("comment")
	rs.Field("postID")
    Loop
    rs.close
    Cnxn.close

Mengakses data menggunakan JDBC hampir sama seperti menggunakan ODBC pada contoh diatas. Pada metode ini record yang diambil dari tabel/view masih merepresentasikan sekumpulan record, bukan merupakan sebuah object dari class (baca: persistence problem dalam object oriented).

Menyadari bahwa hasil query menggunakan ODBC/JDBC bukan merupakan object, kemudian metode ORM dikembangkan. Metode ORM digunakan untuk menjembatani perbedaan paradigma dan teknologi antara relational database dengan object oriented programming. Salah satu teknologi ORM Framework yang terkenal di lingkungan pemrograman java adalah hibernate. Saat ini hibernate juga dikembangkan agar bisa mendukung .NET framework (dengan nama NHibernate). Hasil query dengan menggunakan ORM sudah bukan lagi merupakan recordset namun sudah berupa object. Silahkan baca artikel mengenai hibernate lebih jauh di berkenalan sekilas dengan hibernate dan persistence layer dengan hibernate.

Object yang dihasilkan dari sebuah ORM memang sudah merupakan sebuah object dari class table/view. Akan tetapi object ini merupakan object record yang pasif. Pengertian pasif disini adalah object tersebut tidak memiliki kaitan lagi dengan record yang ada di database atau dengan kata lain object tersebut tidak memiliki metode yang digunakan untuk melakukan update dirinya sendiri. Jika kita melakukan perubahan state pada object tersebut, kita membutuhkan instance class lain yang digunakan untuk melakukan proses sinkronisasi perubahan state dengan database (pada Hibernate digunakan instance dari class Session untuk melakukan sinkronisasi tersebut).

Object dari sebuah active record class tidak hanya merepresentasikan record yang ada didalam database saja akan tetapi object tersebut juga memiliki metode yang digunakan untuk melakukan sinkronisasi (melakukan update/save dirinya sendiri) dengan database tanpa harus menggunakan object lain. Karena object tersebut memiliki metode yang digunakan untuk mengakses database maka object tersebut dinamakan sebagai active record.

Implementasi active record pattern bisa dilihat pada active record yang dimiliki oleh framework Ruby on Rails. Dalam Framework tersebut setiap class models yang merepresentasikan tabel database. Contoh penggunaannya dalam ruby on rails sebagai berikut :

#Membuat object baru
comment = Comment.new
comment.name = "Heru"
comment.email = "heru.ekos@gmail.com"
comment.url = "https://heru.wordpress.com"
comment.comment = "Testing comment "
#menyimpan object ke database
comment.save
#update isi komentar
comment.comment = "Update comment "
comment.update

Jika kita akan melakukan query ke database

#melakukan query
cmt = Comment.find(:first, :conditions => ["name = ? ", "heru"])
#atau lebih singkat bisa digunakan perintas berikut:
cmt = Comment.find_by_name("heru")

Hasilnya sama dengan jika kita melakukan sql query kedalan database dengan perintah

SELECT * FROM comments WHERE name = 'heru' limit 1;

Jadi dalam sebuah active record sebuah object bisa menyimpan dan mengupdate dirinya sendiri.

Baca juga: persistence layer dengan hibernate, active record, Martin Fowler’s active record pattern

technorati tags:, , , , ,

Blogged with Flock

5 thoughts on “Active Record Pattern [Design Pattern Series]

  1. #ratna
    Class adalah sebuah struktur data yang didalamnya memiliki field dan method-method. Method-method yang dimiliki tersebut spesifik terhadap class tersebut serta berfungsi untuk memanipulasi variable yang dimiliki oleh class tersebut

    Object adalah instance dari sebuah class. Setiap object berhubungan object-object yang lain melalui fungsi-fungsi yang ditentukan pada classnya.

    Contoh ilustrasinya adalah sebagai berikut:
    Anggaplah perkuliahan dikelas sebagai sebuah aplikasi yang dibuat menggunakan pemrograman berorientasi object. Pak dosen Burhan mengajar mata kuliah matematika diskrit dikelas yang hanya diikut 3 orang mahasiswa yaitu budi, dina, nana. Terjadi diskusi diantara mereka mengenai topik yang diajarkan. Pak burhan memakai baju warna biru dan kacamata minus 7. Sedangkan budi membawa book 2 sedangkan dina dan nana sama-sama membawa book 3

    Pak Burhan, budi, dina dan nana merupakan object-object. Pak Burhan adalah instance dari class Dosen sedangkan budi, dina dan nana adalah instance dari class Mahasiswa.

    class Dosen memiliki variabel warna baju dan ukuran_kacamata. class Dosen juga memiliki method menyampaikan_materi() dan menjawab_pertanyaan().

    class Mahasiswa memiliki variable jumlah_buku yang dibawa dan memiliki method memperhatikan_materi() dan bertanya_kedosen() serta berdiskusi_dengan_teman().

    Dari method yang ditentukan di class Dosen, pak Burhan (object dari class Dosen) bisa berinteraksi dengan object dari class Mahasiswa melalui method menyampaikan_materi() dan menjawab_pertanyaan().

    Budi, dina dan nana (object dari class Mahasiswa) berinteraksi dengan pak burhan (instance dari class Dosen) melalui method memperhatikan_materi() dan bertanya_kedosen(), ketiganya bisa saling berinteraksi satu sama yang lain melalui method berdiskusi_dengan_teman()

    Semoga ilustrasi diatas bisa memberi tambahan pencerahan.๐Ÿ™‚

  2. saya agak bingung nih. kalo misalnya class dosen dan mahasiswa berinteraksi apakah ada penghubung antara mereka?
    soalnya ga mungkin dosen berhubungan langsung dgn mhasiswa, dimana dosen dan mahasiswa adalah ms (master)
    jadi ms_dosen dgn ms_mhs apakah bisa dihubungkan..
    thanks bget yah.

  3. Hai.. salam kenal.
    beberapa minggu ini saya sedang research tentang nhibernate, kemudian muncul beberapa hal menarik tentang active record nya castle project.
    Ada pengalaman gunain 2 hal itu gak?

    tulisan Design pattern anda menarik๐Ÿ™‚

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