Obat Kuat itu bernama Nhibernate

Posted on Updated on

Ternyata saya telah koding selama 6 bulan untuk satu project. Disela-sela itu telah 2 project saya habisi. Badan tetap segar-bugar,pikiran tetap jernih. Kalo sakit punggung atau masuk angin sih biasa,yang penting masih ada sukarelawan yang mau mijit dan ngeroki. Semuanya akan lancar….ewes-ewes metu angine

 

Saya baru pertama kali menggunakan Nhibernate kedalam project. Awal-awal agak kesulitan. Seperti males membuat mapping databasenya di XML. Kemudian menangani Session Nhibernate agar hidup terus. Pola Parent-Child Mapping yang sampai kini belum sreg dihati. Joining tabel dengan ICreteria agar tidak perlu menulis SQL lagi. Menggunakan Generic di Nhibernate. Dan permasalahan-permasalahan lainnya yang pasti sebentar lagi akan muncul….

 

Tapi tidak masalah. Saya menikmatinya….Nhibernate benar-benar menghemat energi. Tidak ada lagi perintah select, Insert,update ,delete lagi. Semua diserahkan ke Mr. Nhibernate. Kita tinggal membuat domain object,dimodelkan dan terakhir seharusnya dibuatkan Unit Testingnya. Tapi yang terakhir ini enggak kesampaian.Menyesalnya ketika class-class yang dibuat telah bejibun…

 

Setelah itu tinggal mainkan rumusnya. Requirement dari client berubah(OK). Boss minta pernambahan fitur.(OK). Function yang dibuat salah atau tidak sesui dengan yang diharapkan (OK-OK aja tuh). Kamu mau dipecat karena tidak bisa kerja sama( Lha ini baru tidak OK). Salah saya apa ya?

Iklan

20 respons untuk ‘Obat Kuat itu bernama Nhibernate

    Gwen said:
    Juni 1, 2009 pukul 1:02 am

    boleh contoh2 applikasi kecil yg menggunakan nHibernate, mau coba … tapi dari mana ? … Makasih ya

    Gwen said:
    Juni 10, 2009 pukul 3:52 am

    makasih atas responsenya

    saya mencoba dengan kombinasi FluentNHibernate, alasanya
    Mapping tidak menggunakan XML (mungkin lebih familiar)

    untuk insert saya bisa, session.Save()
    tapi kalo mau update/delete data berdasarkan criteria tertentu belum tahu, cari2 di google lom ketemu, mohon pencerahannya

    TK

      Benk responded:
      Juni 10, 2009 pukul 2:03 pm

      Pake Castle saja mas, tidak menggunakan XML Mapping lagi. Untuk update object diambil kemudian untuk meng-updatenya tinggal pake diupdate. Di NHibernate ada function Update() atau SaveUpdateCopy() untuk mengupdate record.

        Gwen said:
        Juni 11, 2009 pukul 4:09 am

        ada contoh hapus data atau edit data dengan menggunakan castle mas, memang di referense ada seh, sudah saya tambahkan, cuma penggunaannya masih belum tahu, atau ada referensi link untuk castle tsb

        TK

    Gwen said:
    Juni 12, 2009 pukul 1:40 am

    mau tanya mas
    misal saya punya data
    NIS = “90101” -> ID
    Nama = “Aisha”
    Kelas = “1B”

    NIS = “91011”
    Nama = “Rizki”
    Kelas = “1B”

    update menggunakan nHibernate yang Kelas 1B menjadi 2A, bagaimana caranya ?

    Karena di session.Update(obj) tidak ada untuk memberikan kondisi, hanya berdasarkan ID

    TK

    pristobenk responded:
    Juni 12, 2009 pukul 11:38 pm

    untuk men-updatenya ambil obejct yang akan diupdate, ganti value di objectnya kemudian tinggal di update.
    Misalnya nama classnya Mahasiswa

    Mahasiswa mhs=s.Get(typeof(Mahasiswa),’90101′) as Mahasiswa;

    mhs.Kelas=”2A”;//ganti kelas ke 2A
    s.Update(mhs);
    s.flush();

    coba lihat dokumentasi Nhibernate yang terbaru. Kalo saya sih lebih menyarankan pake Castle saja dari FluentNHibernate.

    Wizard said:
    Juni 17, 2009 pukul 4:17 am

    Hi,
    Saya tertarik pada statement anda yang ini:
    “Setelah itu tinggal mainkan rumusnya. Requirement dari client berubah(OK). Boss minta pernambahan fitur.(OK). Function yang dibuat salah atau tidak sesui dengan yang diharapkan (OK-OK aja tuh).”
    Apa bener mas kalo dengan NHibernate, ketika ada requirement dari client berubah(misalnya minta tambah field di tabel), kita lebih mudah melakukan perubahan di aplikasi kita? Terus ketika bos minta penambahan fitur, kita juga lebih mudah melakukan penambahan fitur di aplikasi kita? Kira-kira apa saja yang harus diubah kalau client kita minta perubahan? Saya dengar dari temen saya katanya NHibernate membuat aplikasi kita lebih mudah di maintain (khususnya dalam menghadapi perubahan), apa itu bener mas?
    Sori banyak tanya nih, masi beginner soalnya hehehe..
    Matur nuwun.

      pristobenk responded:
      Juni 17, 2009 pukul 5:42 am

      Selama ini masih statement SQL standart? Bagaimana rasanya? capek kan nulis Insert,update,delete,select melulu.Energinya banyak terbuang karena pas menulis kode tersebut harus konsentrasi extra kan?

      NHiberntae sebenarnya cuma mempermudah, pekerjaan yang bertele2 seperti diatas semua bisa dikerjakan oleh NHibernate.Kalo masalah flexible dan ketangguhan aplikasi kita buat terhadap perubahan tergantung pada design yang kita buat bukan pada NHibernate. NHibernate cuma menyelaraskan saja dengan domain object yang dibentuk.

      Untuk membuat bagaimana system yang terbuka terhadap perubahan silahkan pelajari pola2 design patternnya GoF.Ada banyak pola disitu.Untuk mengimplemtasikan NHibernte bisa pake Active Recordnya CastleProject.

    Wizard said:
    Juni 17, 2009 pukul 10:10 am

    Iyup, masi pake sql statement standard, biasa masukin ke stored procedure. Emang sih yang ditawarkan NHibernate itu. Btw, perna denger dari temen katanya kalo ada perubahan di field table db, kita tinggal ubah/update NHibernate aja, nanti otomatis NHibernate yang akan update table di db, apa itu bener mas? Mohon pencerahan hehehehe…
    Btw, ada contoh/tutorial NHibernate pake stored procedure?
    Kalo dari performance, ada yang bilang NHibernate bikin aplikasi jadi lambat, apa bener itu mas?
    Active Record CP uda ada stable releasenya mas? Saya lihat di websitenya masi release candidate. Sebenarnya Active Record CP tuh buat apaan mas? Mohon pencerahan mas hehehehe…
    Thanks a lot.

    pristobenk responded:
    Juni 17, 2009 pukul 10:29 pm

    Betul Mas! kalo sdh bikin Class Domainnya tinggal pake CreateSchema() maka semua tabel + relasinya akan dibuat sama Nibernate.Kalo Aplikasi jadi lambat? lambat dalam artian apa?kalo ambil 1000 record dengan NHibernate dibandingkan dengan Query biasa ya itu betul,tergantung class yang dibuat relasi dengan berapa class lainnya.Harus pinter2 buat statement HQLnya. Tapi kalo mau make strored procedure/atau native query bisa memanfaatkan Sessionnya NHibernate kemudian proses selanjutnya seperti pake ADO.NET biasa. Ini samplenya semoga bisa membantu.

    private static object ExecuteNonQuery(NHibernate.ISession s, object instance)
    {
    bool result = true ;
    //IDbConnection conn = s.Connection;
    IDbCommand cmd = s.Connection.CreateCommand();
    cmd.CommandText = _SQL ;
    try
    {
    cmd.ExecuteNonQuery();
    }
    catch (Exception e)
    {
    result = false;
    throw new Exception(e.Message);
    }
    return (object)result ;
    }
    public static bool ExecuteNonQuery(string sql)
    {

    _SQL = sql;

    try
    {
    ActiveRecordMediator.Execute(typeof(ActiveRecordBase), new NHibernateDelegate(ExecuteNonQuery), null);
    }
    catch (Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    return false;
    }

    return true;

    }

    Wizard said:
    Juni 18, 2009 pukul 1:20 am

    Oo..iya sih mas, aku juga pikir pasti bakal lebih lambat. Tapi lebih lambat berapa persen ya mas kalo misalnya kita bandingin NHibernate dengan ADO.NET retrieve 1000 record data? Sudah pernah melakukan perbandingan belum mas?
    Di contoh yang mas kasi itu, berarti nanti kita tinggal call method ExecuteNonQuery (yang kedua) dengan memasukkan parameter nama stored procedure yang mau dieksekusi yah?
    Btw, mohon penjelasan dikit dong mas tentang active record castle project. Itu buat apaan ya mas? dan kenapa NHibernate di combine dengan itu? Yang aku baca-baca NHibernate biasanya dicombine dengan spring.net.
    Thanks banget yah mas udah mau share ilmu dan pengalamannya.
    Sukses selalu 🙂

    Wizard said:
    Juni 18, 2009 pukul 6:46 am

    Mas tanya lagi nih, hehehe..
    NHibernate sudah support sql server 2008 belum yah?
    Please respond secepatnya ya mas.
    Thanks a lot.

      pristobenk responded:
      Juni 18, 2009 pukul 2:52 pm

      Aku belum nyoba Sql Server 2008, seharusnya gak masalah…Active Record CP itu sebenarnya pola patten juga untuk menyelesaikan masalah, salah satu design pattern-nya martin fowler (www.martinfowler.com) kalo gak salah. Intinya satu untuk mempermudah pekerjaan,coba saja explore nanti juga tau jawabannya sendiri. Spring.NET bagus juga..tetapi saya belum sempat explore lebih jauh…

    Wizard said:
    Juni 26, 2009 pukul 1:21 am

    Mas Benk, mau tanya dikit tentang unit testing di NHibernate itu seperti apa mas? Mohon dijelasin sedikit, dan kalo bs sama contohnya plus referensinya juga hehehe…
    Matur Nuwun mas…

      pristobenk responded:
      Juni 27, 2009 pukul 12:21 am

      Unit testing di NHibernate sama saja dengan unit testing lainnya. bisa menggunakan NUnit coba lihat di http://www.Nunit.org

    Wizard said:
    Juni 26, 2009 pukul 9:27 am

    Mas Benk, tanya lagi nih, tadi kelupaan hehehe…
    Itu CreateSchema nya gmn mas? Ada contohnya atau mungkin referensinya?
    Matur Nuwun mas…

      pristobenk responded:
      Juni 27, 2009 pukul 12:20 am

      Create Schema itu pas pertama kali kita menjalankan aplikasi untuk me-generate tabel. Kalo sdh punya database terus CreateSchemanya lupa di remark atau dihilangkan maka otomatis semua data hilang semua jadi tabel baru semua.

      ActiveRecordStarter.ResetInitializationFlag();

      Hashtable properties = new Hashtable();

      SettingDatabase sd = new SettingDatabase();//buat class sendiri mas..

      if (sd.EnumDbConnection == enumDbConnection.MsSQL2000)
      {

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.SqlClientDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.MsSql2000Dialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }

      if (sd.EnumDbConnection == enumDbConnection.MySQL)
      {

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.MySqlDataDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.MySQLDialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }
      if (sd.EnumDbConnection == enumDbConnection.SQLite)
      {
      path = “your path db”;

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.SQLiteDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.SQLiteDialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }

      InPlaceConfigurationSource source = new InPlaceConfigurationSource();

      source.Add(typeof(ActiveRecordBase), properties);

      Assembly asm1 = Assembly.Load(“your domain object”);

      ActiveRecordStarter.Initialize(asm1, source);

      ActiveRecordStarter.CreateSchema();

    Gwen said:
    Juli 28, 2009 pukul 8:02 am

    huh, saya masih bermimpi menggunakan NHibernate and Castle.ActiveRecord, to Senior kalo ada contoh app kecil yang sudah mencakup insert delete dll, mohon dong di sharing, newbie …. terima kasih sebelumnya

    pristobenk responded:
    Agustus 1, 2009 pukul 6:37 am

    di http://www.castleproject.org ada sample-nya mas..

Tinggalkan Balasan ke pristobenk Batalkan 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 )

Foto Google

You are commenting using your Google 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 )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.