Hey Gwener's, What's Up!
Dalam konsep OOP salah satu yang perlu dipahami adalah inhirate object atau objek turunan. Tujuannya adalah untuk menyamakan objek yang memiliki tujuan yang sama. Konsep ini juga bisa digunakan untuk menghandle base objek yang selalu digunakan untuk mengeksekusi. Misalnya menggunakan DbConnection, Context dan lain-lainnya.
Berikut saya beri contoh untuk menghandle SqlConnection dari base class menggunakan konsep delegate. Pada dasarnya Koneksi ini akan hanya ditangani oleh base classnya sehingga turunan dari base class ini hanya perlu mendelegate fungsi dengan parameter koneksi ini.
public abstract class ContextDB 
{
        SqlConnection _con;
        public TResult UsingConnection(Func invoke)
        {
            if (_con == null)
                _con = new SqlConnection("CONECTION_STRING_HERE");

            lock (locker)
            {
                try
                {
                    _con.Open();
                    return invoke(_con);
                }
                finally
                {
                    _con.Close();
                    _con = null;
                }
            }
        }
}
Manfaat konsep delegate ini adalah object SqlConnection ini hanya dihandle oleh Base classnya. Turunan class ini tidak perlu memikirkan kapan harus membuat objek baru (instance) dari koneksi yang ing digunakan. Dari fungsi UsingConnection diatas saya sudah memvalidasi koneksi yang akan dilepar ke delegate method.
public class Employee : ContextDB
{
        public DataTable GetEmployee()
        {
            return base.UsingConnection(con =>{
            var cmd = con.CreateCommand();
            cmd.CommandText = "Select * from Employee";
            DataTable table = new DataTable();
            table.Load(cmd.ExecuteDataReader());
            return table;
            });
        }
}
Jadi, inilah contoh konsep delegate yang bisa sobat terapkan. Banyak hal yang bisa sobat manfaatkan dengan konsep delegate ini loh. Misalnya untuk handle event maupun objek apapun. Tidak harus koneksi saja. Saya hanya menyarankan jika objek tersebut digunakan berkali-kali maka sebaiknya sobat memanfaatkan konsep delage ini. Agar object tersebut hanya dihandle oleh base class saja.

Manfaat konsep delegate pada proses development

Dalam hal trouble shot ini akan mempermudah sobat menemukan solusinya. Misalnya contoh koneksi diatas. Jika terjadi masalah pada objek tersebut sobat bisa langsung trace kesalahan yang terjadi pada base class tersebut. Sehingga ini akan mempermudah proses sobat mencari solusi yang lebih baik.
Selain itu manfaatnya adalah tidak ada redudansi. Jika koneksi seperti contoh diatas tidak di handle pada base class maka sobat akan membuatnya secara berulang-ulang untuk melakukan query ke database. Banyak hal yang perlu sobat lihat seperti menentukan koneksi string, membuka koneksi dan menutupnya kembali setelah proses eksekusi selesai dilakukan. Jika tidak hati-hati justru proses ini akan membingunkan ketika sudah banyak yang sudah sobat buat. Oleh karena itu alangkah baiknya dibuat saja dan dihandle pada base class dan memanfaatkan konsep delegate ini.

1 comments:

  1. Dengan delegate ini kita bisa juga menghandle eror dengan menambahkan try catch

    ReplyDelete