Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Pembuatan Aplikasi Client Server Dengan Arsitektur 3-tier Part 1

| Comments

Masih melanjutkan postingan sebelumnya yaitu tentang .NET Remoting, tetapi kali ini kita akan mengimplementasikan .NET Remoting pada pembuatan aplikasi database, tapi sebelumnya kita lihat dulu kenapa kok report2x menggunakan .NET Remoting untuk pembuatan aplikasi database karena katanya “orang yang tidak tau itu cendrung memusuhi” halah :D.

Arsitektur Client Server 2-tier

Sadar atau enggak aplikasi yang kita buat selama ini mungkin lebih banyak (semua malahan :D) masuk kategori ini. Kok tau ?

Dari gambar diatas terlihat semua aplikasi klien terkoneksi ke server database dan mengeksekusi method CRUD (Create, Read, Update dan Delete), semakin banyak aplikasi kliennya tentu akan berpengaruh pada kinerja database, apalagi klo rule bisnisnya langsung diletakkan di klien jika ada perubahan otomatis harus mengupdate semua klien :(

Arsitektur Client Server 3-tier

Untuk yg 3 tier sebanyak apapun aplikasi kliennya tidak terlalu bermasalah karena yang terkoneksi ke database hanya satu yaitu aplikasi server, paling-paling spek mesin servernya aja yg dinaikin :D

Klo pengen lebih ngirit untuk aplikasi server bisa satu mesin dengan database, selain itu rule bisnis biasanya diletakkan disini, sehingga jika terjadi perubahan cukup mengupdate disatu tempat.

Nah berdasarkan 2 pertimbangan diatas, mungkin sudah muncul motivasi untuk mencoba .NET Remoting dalam pengembangan aplikasi database… klo iya silahkan lanjutkan membacanya :)

Untuk kasus project yg akan kita buat sederhana saja yaitu aplikasi SmartLibrary (SI Perpus) tentunya tidak semua :D kita ambil contoh pengolahan data buku dan penerbit, selain itu untuk alasan kemudahan databasenya cukup menggunakan Ms Access.

Oke sebelumnya kita lihat dulu project SmartLibrary yang akan kita bangun.

1. SmartLibraryLib

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

Project ini nantinya akan dicompile 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 dijadikan sebuah service (Windows Service).

Aplikasi ini nantinya akan mengimplementasikan semua method-method abstract dari project SmartLibraryLib.

3. SmartLibraryKlien

Terakhir SmartLibraryKlien dibuat dengan memanfaatkan project bertipe Windows Application isinya berupa Form dan Report, aplikasi ini hanya memanggil method-method abstract dari project SmartLibraryLib dengan memanfaatkan objek proxy sehingga method tersebut akan dieksekusi secara remote (dijalankan di sisi server).

Berikut gambaran project yang akan kita bangun.

Project diatas sangat mirip dengan project Calculator yang sudah saya bahas pada postingan sebelumnya.

Sesuai urutan kita akan membuat project SmartLibraryLib terlebih dulu dan sebagai gambaran apa saja yang ada didalam project SmartLibraryLib ini bisa kita lihat dari class diagram berikut :

Dari class diagram diatas terlihat bahwa SmartLibraryLib hanya terdiri dari Interface Dao dan Class Model (pada postingan kali ini hanya dibahas pengolahan data buku dan penerbit).

Interface IDao merupakan interface generic yang berisi method-method abstract CRUD yang akan diturunkan oleh interface IBukuDao dan IPenerbitDao.

Untuk class model merupakan representatif dari tabel-tabel yang ada di database dalam ini tabel buku dan penerbit.

Oke kita langsung saja membuat project ini.

Membuat Project SmartLibraryLib

  1. Klik menu File ->New -> Project …

  1. Pada dialog New Project aktifkan pilihan Visual C# kemudian pada pilihan Templates pilih Class Library

Pada isian Name isikan SmartLibraryLib, setelah itu klik tombol Ok.

Secara default pada saat pembuatan project sudah otomatis disediakan 1 buah class kosong dengan nama Class1, kita akan menambahkan class baru jadi class ini dihapus saja.

Menambahkan Folder IDao dan Model

Tujuannya untuk mengelompokkan interface dao dan class model

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

Kemudian untuk nama folder diganti dengan IDao. Ulangi langkah sebelumnya untuk menambahkan folder Model.

Hasil akhir sementara

Menambahkan Class Model

Kita akan menambahkan class model Buku dan Penerbit

Semua class model akan kita tempatkan di dalam folder Model.

  1. Klik kanan folder Model -> Add -> Class..

Untuk isian Name diisi Buku.

Setelah itu akan tampil editor code class Buku

Jangan lupa untuk menambahkan access modifier public.

Berikut kode lengkap untuk class Buku.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
namespace SmartLibraryLib.Model
{
    [Serializable]
    public class Buku
    {
        private string _iSBN;
        public string ISBN
        {
            get { return _iSBN; }
            set { _iSBN = value; }
        }

        private string _judul;
        public string Judul
        {
            get { return _judul; }
            set { _judul = value; }
        }

        private string _edisi;
        public string Edisi
        {
            get { return _edisi; }
            set { _edisi = value; }
        }

        private string _bahasa;
        public string Bahasa
        {
            get { return _bahasa; }
            set { _bahasa = value; }
        }

        private Penerbit _penerbit;
        public Penerbit Penerbit
        {
            get { return _penerbit; }
            set { _penerbit = value; }
        }
    }
}

Satu hal yang penting disini adalah objek/instance dari class Buku akan diserialisasikan dari server ke klien atau sebaliknya sehingga harus ditambahkan atribut [Serializable].

Ulangi langkah diatas untuk menambahkan class Penerbit. Berikut kode lengkap class Penerbit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace SmartLibraryLib.Model
{
    [Serializable]
    public class Penerbit
    {
        private int _penerbitID;
        public int PenerbitID
        {
            get { return _penerbitID; }
            set { _penerbitID = value; }
        }

        private string _nama;
        public string Nama
        {
            get { return _nama; }
            set { _nama = value; }
        }
    }
}

hasil sementara

Menambahkan Interface IDao

Kita akan menambahkan interface IDao, IBukuDao dan IPenerbitDao

Dari diagram diatas terlihat bahwa IDao merupa interface induk dari interface IBukuDao danIPenerbitDao.

IDao sendiri merupakan interface generic yang mempunyai method abstract CRUD secara umum, sehingga interface IBukuDao danIPenerbitDao tinggal menambahkan method-method abstract yang menjadi spesialisasinya masing-masing.

Semua interface IDao akan kita tempatkan di dalam folder IDao.

  1. Klik kanan folder IDao -> Add -> New Item…

  1. Pada pilihan template pilih Interface kemudian untuk isian Name diisi IDao.

Setelah itu akan tampil editor code interface IDao

Jangan lupa untuk menambahkan access modifier public.

Selanjutnya kita tinggal menambahkan 5 method abstractnya yaitu Save, Update, Delete, GetAll dan GetReportAll sesuai class diagram diatas.

Berikut kode lengkapnya

Ulangi langkah sebelumnya untuk menambahkan interface IBukuDao dan IPenerbitDao.

Berikut kode lengkap interface IBukuDao dan IPenerbitDao

Pada interface IBukuDao dan IPenerbitDao diatas membutuhkan namespace SmartLibraryLib.Model karena sebagian method abstractnya mengakses class model.

Mengcompile project SmartLibraryLib

Tujuannya adalah agar project SmartLibraryLib ini bisa digunakan sebagai referensi oleh project SmartLibraryServer dan SmartLibraryKlien

  1. Klik kanan project SmartLibraryLib -> Build

Setelah itu akan tampil hasil output dari proses Build

Akhirnya selesai juga dan insya Allah akan berlanjut

Selamat mencoba :)

Comments