Home > .NET Remoting, Visual C# > Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 4

Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 4

April 28, 2012

Melanjutkan postingan sebelumnya, tetapi kita akan review sedikit beberapa project yang sudah kita buat :

1. SmartLibraryLib

SmartLibraryLib dibuat dengan memanfaatkan project bertipe Class Library yang isinya hanya berupa interface IDao dan class Model.

Hasil compile project ini akan menjadi file dengan ekstensi .dll (SmartLibraryLib.dll), file SmartLibraryLib.dll ini akan dishare atau ditambahkan sebagai referensi untuk aplikasi SmartLibraryServer dan SmartLibraryKlien.

Teknik ini dikenal dengan istilah “Shared Assembly” tujuannya adalah agar aplikasi server dan klien bisa berkomunikasi dengan cara yang sama.

2. SmartLibraryServer

SmartLibraryServer dibuat dengan memanfaatkan project bertipe Console Application, implementasi aslinya biasanya aplikasi server bisa dijadikan sebuah service (Windows Service) atau di hostnya menggunakan web service IIS.

Aplikasi inilah yang akan mengimplementasikan semua method-method abstract dari project SmartLibraryLib.

Adapun project penutup kita adalah SmartLibraryKlien, project ini dibuat  dengan memanfaatkan  project  bertipe  Windows Application  yang  isinya  hanya  berupa  Form  berikut  komponen-komponen pendukungnya (Label, TextBox, Button, ListView dll) :

Project  SmartLibraryKlien  tidak  langsung  mengakses  database  untuk  proses CRUDnya  melainnya  hanya  mengakses  objek-objek  dari project SmartLibraryServer secara remote, jadi  project  SmartLibraryServer  inilah  yang  sudah  menghandle  semua  proses CRUDnya.

Oke kita langsung saja mengaktifkan kembali solution SmartLibrarynya dimana didalamnya sudah terdapat project SmartLibraryLib dan SmartLibraryServer.

1. Klik kanan Solution SmartLibrary -> Add -> New Project

2. Pada dialog Add New Project aktifkan pilihan Visual C# kemudian pada pilihan Templates pilih Windows Application

Pada isian Name isikan SmartLibraryKlien untuk isian Location dibiarkan saja setelah itu klik Ok.

Jika langkah sebelumnya berhasil maka pada solution SmartLibrary akan ketambahan satu project baru yaitu SmartLibraryKlien.

Secara default pada saat pembuatan project dengan tipe Windows Application sudah otomatis disediakan 1 buah form kosong dengan nama Form1, kita akan menambahkan form baru jadi form ini dihapus saja.

Menambahkan folder View

Folder disini digunakan untuk mengelompokkan class sesuai dengan fungsinya, contoh kita akan menambahkan folder View yang di dalamnya terdapat class FrmBuku dan FrmAddEditBuku.

1. Klik kanan project SmartLibraryKlien -> Add -> New Folder

Menambahkan FrmBuku dan FrmAddEditBuku

1. Klik kanan folder View -> Add -> Windows Form …

2. Pada dialog Add New Item – SmartLibraryKlien, isikan FrmBuku pada isian Name

3. Jika sudah berhasil menambahkan FrmBuku, ulangi langkah sebelumnya untuk menambahkan FrmAddEditBuku

Berikut hasil akhir sementara dari langkah-langkah sebelumnya

Setelah itu kita desain tampilkan FrmBuku dan FrmAddEditBuku seperti berikut :

Menambahkan Library SmartLibraryLib

Sama seperti aplikasi server (SmartLibraryServer) yang membutuhkan library SmartLibraryLib, aplikasi klien (SmartLibraryKlien) juga membutuhkan library ini, tujuannya adalah agar aplikasi server dan klien bisa berkomunikasi dengan cara yang sama.

Oke berikut langkah-langkahnya :

1. Klik kanan folder References -> Add Reference…

2. Aktifkan tab Projects kemudian pilih SmartLibraryLib

3. Jika langkah sebelumnya berhasil akan ketambahan 1 buah node dengan nama SmartLibraryLib pada folder References

Sampai disini kita tinggal melengkapi kode FrmBuku dan FrmAddEditBuku.

Berikut ringkasan kodenya.

// namespace utk mengakses interface dao dan class model
using SmartLibraryLib.IDao;
using SmartLibraryLib.Model;

Kode diatas perlu ditambahkan agar FrmBuku bisa mengakses semua interface dan class model yang ada di dalam library SmartLibraryLib.

private IBukuDao bukuDao = null;

Objek bukuDao merupakan objek dari interface IBukuDao yang berfungsi sebagai proxy dari remote object class BukuDao.

Sebuah method jika dipanggil melalui objek proxy maka akan dieksekusi secara remote.

// constructor
public FrmBuku()
{
    InitializeComponent();

    string server = "localhost";
    string port = "1234";
    string uri = "SmartLibraryServer.BukuDao";

    string url = "tcp://" + server + ":" + port + "/" + uri;

    // mendapatkan proxy untuk remote object dari class BukuDao
    bukuDao = (IBukuDao)Activator.GetObject(typeof(IBukuDao), url);

    // tampilkan semua data buku
    LoadDataBuku();

}

Kode diatas adalah sebuah constructor dan seharusnya kita sudah tidak asing lagi dengan yang satu ini.

Constructor adalah method khusus yang akan dipanggil pada saat menciptakan objek dari sebuah class.

Penjelasan dari mana datangnya nilai locahost, 1234 dan SmartLibraryServer.BukuDao pada kode di atas bisa Anda lihat disini.

Menampilkan Data

// method untuk menampilkan data buku ke listview
private void FillToListView(bool addData, Buku buku)
{
    if (addData)
    {
        int noUrut = lvwBuku.Items.Count + 1;

        ListViewItem item = new ListViewItem(noUrut.ToString());
        item.SubItems.Add(buku.ISBN);
        item.SubItems.Add(buku.Judul);
        item.SubItems.Add(buku.Bahasa);
        item.SubItems.Add(buku.Edisi);
        item.SubItems.Add(buku.Penerbit.Nama);

        lvwBuku.Items.Add(item);
    }
    else
    {
        int row = lvwBuku.SelectedIndices[0];

        ListViewItem itemRow = lvwBuku.Items[row];
        itemRow.SubItems[2].Text = buku.Judul;
        itemRow.SubItems[3].Text = buku.Bahasa;
        itemRow.SubItems[4].Text = buku.Edisi;
        itemRow.SubItems[5].Text = buku.Penerbit.Nama;
    }
}

// method untuk menampilkan semua data buku
private void LoadDataBuku()
{
    lvwBuku.Items.Clear();

    List<Buku> daftarBuku = bukuDao.GetAll();
    foreach (Buku buku in daftarBuku)
    {
        FillToListView(true, buku);
    }
}

// method untuk menampilkan semua data buku berdasarkan judul
private void LoadDataBuku(string judul)
{
    lvwBuku.Items.Clear();

    List<Buku> daftarBuku = bukuDao.GetByName(judul);
    foreach (Buku buku in daftarBuku)
    {
        FillToListView(true, buku);
    }
}

Menyimpan dan Mengupdate Data

private void btnSimpan_Click(object sender, EventArgs e)
{
    int result = 0;

    Buku buku = new Buku();
    buku.ISBN = txtISBN.Text;
    buku.Judul = txtJudul.Text;
    buku.Bahasa = txtBahasa.Text;
    buku.Edisi = txtEdisi.Text;
    buku.Penerbit.PenerbitID = penerbitID[cmbPenerbit.SelectedIndex];

    if (this.addData) // data baru
    {
        result = bukuDao.Save(buku);
        if (result > 0)
        {
            ResetInput();
            txtISBN.Focus();
        }
        else
        {
            MessageBox.Show("Data buku gagal disimpan", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
    else
    {
        result = bukuDao.Update(buku);
        if (result > 0)
        {
            this.Close();
        }
        else
        {
            MessageBox.Show("Data buku gagal disimpan", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
}

Menghapus Data

private void btnHapus_Click(object sender, EventArgs e)
{
    if (lvwBuku.SelectedItems.Count > 0)
    {
        int row = lvwBuku.SelectedIndices[0];

        ListViewItem itemRow = lvwBuku.Items[row];

        Buku buku = new Buku();
        buku.ISBN = itemRow.SubItems[1].Text;
        buku.Judul = itemRow.SubItems[2].Text;

        string msg = "Apakah data buku '" + buku.Judul + "' ingin dihapus ?";
        if (MessageBox.Show(msg, "Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
        {
            int result = bukuDao.Delete(buku);
            if (result > 0) // data barang berhasil dihapus
            {
                MessageBox.Show("Data buku berhasil dihapus", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information);
                LoadDataBuku();
            }
            else
            {
                MessageBox.Show("Data buku gagal dihapus", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

    }
    else // data belum dipilih
    {
        MessageBox.Show("Data belum dipilih");
    }
}

Menjalankan dua project secara bersamaan

Secara defaut pada saat kita menjalankan program (F5) hanya satu project yang akan dijalankan dalam satu waktu, sedangkan untuk mencoba aplikasi ini kita harus menjalankan project SmartLibraryServer dan SmartLibraryKlin secara bersamaan.

Untuk merubah setting ini berikut langkah-langkahnya :

1. Klik kanan solution -> Set Startup Projects

2. Pada dialog Solution aktifkan pilihan Multiple startup projects kemudian atur urutan eksekusinya (server dulu kemudian klien)

Setelah itu kita bisa langsung menekan tombol F5

Pada gambar diatas terlihat setiap kali aplikasi klien mengakses method CRUD, prosesnya akan dijalankan di sisi server, ini dibuktikan dengan muncul pesan “Method <nama method> dieksekusi di sisi server”.

Selamat MENCOBA🙂

  1. May 2, 2012 at 2:32 pm

    untuk pendistribusianya 3 tier pada sisi frontend dan backend caranya gmana om?

    • May 3, 2012 at 4:39 pm

      Kan dari nama project udah jelas om, SmartLibraryKlien (diinstall di klien) dan SmartLibraryServer (diinstall diserver atw bisa satu mesin dengan databasenya).

  2. ahmad
    May 7, 2012 at 8:53 am

    Om klo pake dababase MySql bisa jg ???

    • May 7, 2012 at 12:50 pm

      Ya jelas bisa om, klo mau sample yg C# & MySQL bisa dilihat disini.

  3. ahmad
    May 22, 2012 at 10:10 am

    Om .. aku udah coba coding dan berjalan bagus .. klo semua data tidak di load ke listview dan mau update … code buat tampilnya ke form nya gimana ? dan klo data yg berisi tgl mau convert ke string gimana ? thanks om…

  4. ahmad
    January 11, 2013 at 3:37 pm

    om tuk koneksikan SmartLibraryKlien Dan SmartLiberaryServer via wifi gimana ?

    • January 11, 2013 at 3:56 pm

      Sama aja om koneksi via jaringan atw wifi

  5. ahmad
    January 11, 2013 at 4:38 pm

    Jadi tinggal instal SmartLibraryKlian di PC 1 dan dan SmartLibraryServer di PC 2 ya om

    • January 11, 2013 at 4:53 pm

      Yuph

  6. ahmad
    January 11, 2013 at 4:56 pm

    Ok thanks om

    • January 11, 2013 at 7:55 pm

      yup sama2

  7. ahmad
    January 12, 2013 at 9:50 am

    Om aku dah coba instal SmartLibraryServer di PC 1 dan SmartLibraryKlien id PC 2 kok ga bisa konek ke database dan server nya via LAN

  8. January 12, 2013 at 2:58 pm

    Coba fokus dulu pengecekannya di aplikasi SmartLibraryServer, karna yg berhubungan langsung dg database adalah aplikasi SmartLibraryServer

  9. ahmad
    January 14, 2013 at 12:25 pm

    udah di cek di applikasi SmartLibraryServer sama dengan kode om .. dan aku coba Ping dari Server ga konek.. tp klo dari Klien coba ping ke server jalan kira2 masalah nya di mana ya om ?

    • January 14, 2013 at 2:02 pm

      Klo itukan artinya bermasalah di koneksi jaringan bukan dikode programnya, coba dinonaktifkan dulu firewall baik di komputer server atau client, minimal bisa ngeping dari server -> klien atau sebaliknya.

  10. ahmad
    January 17, 2013 at 10:51 am

    Om aku udah non aktifkan Firewall dan udah bisa Ping semua … tp masih ga bisa akses ke server … kira setting IP address ato cara setting server nya gimana om ?

    • January 17, 2013 at 10:54 am

      Klo dicoba di satu komputer dulu gmana ? Bisa enggak enggak ?, dg perioritas eksekusi aplikasi server dulu baru aplikasi klien.

  11. ahmad
    January 17, 2013 at 11:29 am

    Klo server dan klien satu kompter bisa jalan semua

    • January 19, 2013 at 9:52 am

      Coba cek bagian constructor aplikasi klien, jangan2x belum dirubah nilai dari variabel server, harusnya diganti dengan ip server.

  12. ahmad
    January 19, 2013 at 10:42 pm

    Harus di ganti dengan IP gimana om

    • January 20, 2013 at 2:44 pm

      D’oh si om masih belum paham juga, kan contoh diatas isi dari variabel server = localhost yg artinya aplikasi server dan klien dijalankan di komputer yang sama.

      Nah kan om nanya aplikasi server dan klien dicoba di komputer yang berbeda, kita asumsikan komputer server dipasang di komputer A dg IP = 192.168.1.1 sedangkan komputer klien dipasang di komputer B dg IP = 192.168.1.2

      Berarti nilai dari variabel server yg ada di aplikasi klien harus om ganti menjadi 192.168.1.1

  13. ahmad
    January 21, 2013 at 11:35 pm

    Ok makasih om ..

    • January 22, 2013 at 8:39 am

      Yuph

  1. April 16, 2014 at 9:14 am
Comments are closed.
%d bloggers like this: