Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 1
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 😀
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 😀 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 …
2. 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.
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
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…
2. 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 🙂
wah mantap…. makasih tutorialnya… monggo dilanjut om…
Oke om makanya sering2x nongkrong disini 🙂
om klo menggunlan sistem diatas apakah nanti klien tidak akan banyak memakan resource di jaringan??trafic jaringan akan semakin padat karena kita kan load seluruh aplikasi??
Maksudnya gimana nih om load seluruh aplikasi ??
Intinya sama saja seperti aplikasi client server yg 2-tier, hanya saja disini tidak ada klien yg langsung mengakses database tetapi harus melalui perantara aplikasi server atw yg dikenal dg istilah middle tier.
Malahan yg 2-tier lebih berat om, karena langsung akses database dan masing2x mengeksekusi perintah CRUD, sedangkan yg 3-tier hanya tukar2xan objek dari client ke server atw sebaliknya.
Untuk develop sendiri memang lebih gampang yg 2-tier, yg 3-tier lumayan ribet 😀
Sy sendiri belum berani mengimplementasikan yg 3-tier untuk aplikasi lepas/produk masal, kecuali yg benar2x bisa sy kontrol secara penuh mulai dari develop sampai implementasi.
salam kenal om.
om, sistem CS 3 tier pake vb 6 bisa ga?
Yg jelas bisa om, salah satunya bisa menggunakan DCOM
om… mau tanya nich kalo menggunakan VB.Net Visual Basic apakah sama tahap2 pengerjaannya…saya lagi coba membuat Aplikasi menggunakan VB.net dengan Database SQL server..kira2.. ada contoh mudahnya ga om?
Coba yang 2-tier dulu om, ini ada contoh tetapi menggunakan C# dan MySQL, toh sama saja antara C# dan VB .NET
maksudnya gini om kasusnya… ada 2 komputer.. komputer pertama bertindak sebagai Server(disini saya install SQL servernya) sedangkan untuk aplikasinya saya install di PC ke-2.. kira kira pake Listing yang om Share di atas…bisa engga kalo menggunakan VB.NET..terus terang sudah saya coba seminggu tapi ga konek konek om.. saya engga pake class ato method..saya coba langsung pake Conection String kaya gini :
Public Function Open() As SqlClient.SqlConnection
Dim conect As New SqlConnection(“Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=DatabaseKlinik;User ID=superuser;Password=password”)
‘Dim conect As New SqlConnection(“Server=ASUSA42F-PC\SQLEXPRESS;Database=DatabaseKlinik;integrated security=true”)
conect.Open()
Return conect
End Function
saya jalankan di Aplikasi di PC Pertama (sqlserver ama aplikasinya dalam 1 komputer ) itu jalan.. tapi pas saya coba di client ..itu ga bisa… muncul gini.. :
TCP Provider: No connection could be made because the target machine actively refused it
pusing 0mm..tapi menantang =,=”
Mungkin keblok firewall om jadi sql servernya enggak bisa diakses dari komputer lain.
Emg pake OS apa? Trus sql server versi brp ?
FIrewall nya udah saya matikan dua dua nya… antivirusnya juga udah saya matikan Om…. SQL SERVER nya saya udah enabled in untuk TCP/IP nya port All nya sudah saya kasih default 😀 😀 tapi tetep aja masih eror nya gt…. padahal kabel LAN nya berfungsi baik om untuk file sharing juga lancar….saya pake VB 2008 sama SQL SERVER 2005 Management Express om ….=,=”
Pake SEVEN om… 😀 😀
Coba utk string koneksinya pake yg ini om :
om..aplikasi 3-tier ini bisa diterapakn di bahasas pemrograman java? arstektur 3-tier ini sama dengan konsep MVC(Model,View, Controller). mohon pencerahannya.
Iya sih om, memang ada kemiripan hanya saja contoh diatas tidak menggunakan controller 😀
Inti postingan sy ini adalah utk menunjukkan bagaimana cara mengakses objek yg ada diluar domain aplikasinya menggunakan teknologi .NET Remoting, nah fokusnya sebenarnya adalah di .NET Remoting ini klo di java mirip seperti Java RMI
oke..terima kasih banyak om
Sama2x om 🙂
berarti itu ga pake IP address om? kan pengennya lewat jaringan.. trus untuk user SA nya apa buat user baru di sql server nya ato gimana om?
Klo kita ngeping nama komputer atw ip address hasilnya kan sama aja om, klo mau diganti ip komputer jg enggak masalah.
Misal IP Server : 192.168.1.1
Gubrakkkkk…, nah ini nih yg kebangetan banget udah make sql server tapi enggak tau apa itu user “sa”
Sama seperti orang udah make MySQL tetapi enggak tau apa itu user “root” atau yang udah make Firebird tetapi enggak tau apa user “SYSDBA”.
hahaha…..saya coba dulu om…seengga nya saya ga tau saya nanya om daripada pura pura ga tau 😀
Oke om sipp, berarti skrg udah tau ya ? 😀
udah bisa om kalo satu PC..tapi yang beda PC blum….hehehe lanjut malam ah gawe dulu….makasi banyak om 😀
Coba dibagian Security -> Server authentication aktifkan pilihan “SQL Server and Windows Authentication mode”
udah dicoba om pake user sa trus security nya juga dari awal udah pake 2 autentikasi pake windows and server tapi tetep om gabisa connect .. masih :
TCP Provider: No connection could be made because the target machine actively refused it
huaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah pusing 😀
and btw saya IP nya pake 127.0.0.1 1433 soalnya pake IP lain gabisa… boro boro 2 komputer… di Laptop sendiri kalo IP nya bukan 127.0.0.1 1433 gabisa connect om..
Gini aja om, coba koneksi dari komputer lain dulu via query Query Analyzer (sql server 2000) atau SQL Server Management Studio Express (sql server 2005 keatas) klo enggak bisa juga ya jangan harap bisa koneksi dari aplikasi yg om buat.
Jadi intinya benahin dulu setting sql servernya, atau coba baca artikel Enable remote connection to SQL Server 2005 Express
udah bisa om… masalah nya ternyata Antivirus nge Blok Jaringannya..setelah saya off kan AV nya… alhamdulillah bisa terkoneksi 😀 makasi banyak om hehehehe
Gubrakkk 😀
om, apakah setiap pembuatan class harus di BUILD terlebih dahulu sebelum melanjutkan ke interface?
Sebaiknya sih
om , cara server menangani input dari banyak client agar tidak terjadi kres gimana. ?
Contoh crashnya g mana om ?
ketika mengakses database, misal insert, update, delete oleh banyak client dlm waktu bersamaan.
Emg ada berapa klien ? Coba terapkan buka-tutup koneksi setiap menjalankan perintah insert, update, delete dan select.
maaf suhu, saya udah coba buat library ini satu persatu mulai dari awal, tetapi setelah saya compile keluar error spt ini:
Error 1 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IPenerbit.cs 13 9 SmartLibararyLib
Error 2 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IBukuDao.cs 14 9 SmartLibararyLib
Error 3 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IDao.cs 15 9 SmartLibararyLib
itu disebabkan karena apa ya? terus solusinya gimana suhu? maklum banyak nanya masih nubie
Class DataSet ada di dalam namespace System.Data, jadi harus ditambahkan dulu namespacenya.
Wah blog nya pak kamarudin to,. salam jumpa pak.
pak nanya2 nic, kebetulan kan saya punya aplikasi jadi cuma devlop nya make vb.6 dan databasenya masih make acces, kira2 bisa gak c pak lo kita bikin model tree tier, terimakasih sebelumnya.
Ass, om masih lum ngerti nih.
kalau di 2 tier kan, dari client nembak langsung ke komputer database (server) melalaui aplikasinya + memebuat settingan melalui MySQL ODBC Connector, kalau dari server cukup install MySQL + Database-nya.
kalau untuk 3 tier gimana yah…, dari komputer client file/aplikasi apa saja yang diperlukan untuk mengakses Remote Object yang ada di server, begitu juga dari sisi aplication server. Mohon pencerahanya om, Maksih
Ass…
Om ada contoh sourcecode tuk hak akses dan login form ??
Coba kesini om
klo sourcecode level akses yg 3 tier ada ga om ?
Engga punya om, bikin sendiri aja 😀
om. yang bagian ini
Private _penerbit As Penerbit
Public Property Penerbit() As Penerbit
Get
Return _penerbit
End Get
Set(ByVal value As Penerbit)
_penerbit = value
End Set
End Property
Type penerbit – nya dari mana yak?
trima kasih
Ya dari class Penerbit, coba cek lagi di atas
oh iya ding ada
Sipp :), tapi kok kodenya pake VB .NET ?
hahaha….saya bisanya cuma vb.net om. jadi ya ngetesnya pake vb.net
Oke om, apapun bahasanya yg penting paham konsepnya 🙂
ada gak link download untuk file contoh diatas
Linknya ada disini.
om mau tanya.
misal saya ada server yg akses ke dua database di lokasi yg berbeda.
apa port-nya harus berbeda.
misal u db1 ->tcp://localhost:8084/serviceA
u db2 ->tcp://localhost:8085/serviceB
terima kasih
enggak perlu om, kan nama servicenya udah beda serviceA dan serviceB