Google Search

Kamis, September 4

Object Cloning

The Object Itself


CloneFixture
[Test]
public void CloningObject(){
Employee emp1=new Employee();
Employee emp2;

emp2=emp1.MemberwiseClone();
Assert.AreNotEqual(emp1,emp2,"Dua object seharusnya berbeda");
}

Employee
namespace Dewipadi.Clone {
public class Employee {

}
}

MemberwiseClone ternyata protected jadi tidak bisa diakses dari class CloneFixture. Bagaimana kalau kita perkenalkan method baru untuk class Employee, katakanlah Copy(). Didalam method ini kemudian kita panggil MemberwiseClone().

CloneFixture
[Test]
public void CloningObject(){
Employee emp1=new Employee();
Employee emp2;

emp2=emp1.Copy();
Assert.AreNotEqual(emp1,emp2,"Dua object seharusnya berbeda");
}

Employee

public class Employee {
public Employee Copy(){
return (Employee)this.MemberwiseClone();
}
}


Output dari MemberwiseClone ternyata object, jadi kita harus meng-casting secara explisit. Setelah diubah seperti diatas, test PASS/GREEN.

Value Object


Nah sekarang kalau kita tambahkan property didalamnya, kantakanlah Nama, apakah perubahan property ini hanya akan mempengaruhi satu object saja atau kedua object akan berubah? Untuk itu kita buat test baru.

CloneFixture

[Test]
public void CloningFieldOfValueObject(){
Employee emp1=new Employee();
Employee emp2;

emp2=emp1.Copy();
emp1.Name="Dewi Padi";
Assert.AreNotEqual("Dewi Padi",emp2.Name,"Tidak boleh terisi dewi padi");
}


Karena menambahkan property adalah cara yang gampang, kita tidak perlu mem-fake implementasi property. Jadi langsung kita tulis saja get dan set.

Employee

public class Employee {
private string m_name="";
public Employee Copy(){
return (Employee)this.MemberwiseClone();
}
public string Name {
get {
return this.m_name;
}
set {
this.m_name=value;
}
}
}
Seperti yang kita harapkan test langsung green.

Reference Object

Bagaimana dengan object yang terreference dengan object yang sedang kita copy? Apakah ikut tercopy? Atau hanya referencenya saja? Ok. Kita tanyakan saja pada komputer.

Scenario testnya kurang lebih seperti ini:
Kita gunakan lagi class Employee. Setiap Employee mempunyai atasan. Nah, atasan itu sebetulnya juga Employee. Kita akan buat dua orang Employee yang satu sebagai atasan dan yang satu lagi sebagai karyawan. Kemudian kita buat satu variabel Employee lagi dan kita copykan employee bawahan tadi ke sini.

CloneFixture

[Test]
public void CloningFieldOfReferenceObject(){
Employee atasan=new Employee();
Employee bawahan=new Employee();
bawahan.Atasan=atasan;
Employee copian=bawahan.Copy();
Assert.AreNotEqual(copian.Atasan,atasan);
}
Untuk implementasi di class Employee kita cukup pasang property get set.

Employee

public class Employee {

private Employee m_atasan=null;

public Employee Atasan {
get {
return this.m_atasan;
}
set {
this.m_atasan=value;
}
}
}
Hasil dari test ini adalah Red. Dengan kata lain object copian.Atasan sama dengan object atasan. Hal ini terbukti ketika assert not Equal kita ganti dengan assert equal.

[Test]
public void CloningFieldOfReferenceObject(){
Employee atasan=new Employee();
Employee bawahan=new Employee();
bawahan.Atasan=atasan;
Employee copian=bawahan.Copy();
Assert.AreNotEqual(copian.Atasan,atasan);
}




And here is the rest of it.

Click Here to Read More..

Kamis, Juli 10

Object Oriented Programming (1)

Object Oriented Programming (OOP) atau Pemrograman Berorientasi Object sekarang telah menjadi menu wajib pada hampir semua bahasa pemrograman, termasuk C# dan Mono. Karena itu, suka atau tidak suka programmer pemula juga harus menguasai.

OOP memiliki empat (4) landasan/tiang/pilar utama: inheritance, polymorphism, encapsulation dan abstraction. Saya akan membahas satu persatu pilar ini dengan beranggapan anda telah tahu dasar C# atau Mono.

Object dan Class


Untuk memahami keempat pilar diatas, anda harus paham terlebih dahulu perbedaan antara object dan class. Mungkin anda telah membaca banyak buku dan mungkin referensi lain mengenai kedua term ini. Disini saya akan mencoba mengungkapkan apa yang saya pahami, sehingga kita memiliki persamaan persepsi tentang object dan class.

Buat saya, hubungan antara class dan object adalah seperti hubungan antara cetakan dan hasil cetakan. Antara kue dengan cetakannya. Atau kalau meminjam istilah orang arsitek atau sipil, hubungan keduanya mirip dengan gambar rumah (blue print) dengan rumah yang dihasilkan dari gambar itu.

Class bertindak sebagai cetakan atau blue print, sedangkan object adalah sesuatu yang dihasilkan dari cetakan atau blue print. Kapan sebuah object muncul? Ketika kita menginstance atau memanggil keyword new saat itulah object muncul.

Dibawah ini adalah contoh sebuah class Employee:

public class Employee {
private string m_name;
public Employee(string name){
this.m_name=name;
}
public string Name {
get {
return this.m_name;
}
}
}


Dan berikut ini adalah contoh bagaimana sebuah object dibuat dari class Employee diatas:

Employee agus=new Employee(“Agus”);


Inheritance


Inheritance atau turunan atau pewarisan adalah pilar pertama yang paling mudah dipahami. Mengapa demikian? Sebab konsep ini sangat dekat sekali dengan keseharian kita. Setiap dari kita pasti punya orang tua. Hubungan orang tua-anak adalah hubungan pewarisan. Apa yang ada pada anak umumnya juga ada pada orang tua. Suara anak kadang hampir sama dengan orang tua. Warna kulit, bentuk rambut, gigi, dan lain sebagainya juga mengikuti pola demikian. Jadi pewarisan adalah konsep yang sangat dekat sekali dengan keseharian kita.

Dalam OOP pola turunan ini dicoba untuk ditiru. Hubungan turunan orangtua-anak disebut sebagai hubungan “is a” atau yang dalam bahasa Indonesianya “ia adalah”. Jika Mamat adalah ayah Agus, maka dalam bahasa OOP boleh disebut sebagai “Agus adalah Mamat”. Sebab sebagian sifat Agus diambil/diturunkan dari Mamat.

“Agus adalah Mamat”, bagi seorang pemula tentu agak membingungkan, sebab kalimat itu bisa dilawan dengan kenyataan bahwa “Agus bukanlah Mamat”. Ini karena Agus dan Mamat adalah kongkrit (ada). Akan lebih jelas jika kita ambil contoh hubungan abstrak-kongkrit. “Pingky adalah seekor babi”. Disini hubungan babi-pingky menjadi jelas, sebab secara implisit tergambarkan dalam otak kita bahwa pingky mewarisi sifat-sifat babi. Demikian juga kalimat “babi adalah binatang”, sangat jelas kalau babi mewarisi sifat binatang, bukan manusia. Maka, kalimat “pingky adalah babi dan babi adalah binatang” adalah kalimat waris mewarisi yang pada akhirnya juga menyatakan bahwa “pingky adalah binatang”.
Dalam C# atau Mono hubungan-hubungan diatas ditulis dalam bentuk class sebagai:

public class Mamat {
public string BentukRambut {
get {
return “Kriting”;
}
}
}
public class Agus:Mamat {
}


Dalam class Agus kita tidak perlu lagi mendefinisikan BentukRambut, sebab secara otomatis BentukRambut Agus mengikuti BentukRambut Mamat: “Kriting”. Bagaimana jika agus melakukan rebonding? Dalam C# atau Mono rebonding rambut Agus dapat dilakukan dengan cara mengoverride BentukRambut. [Note: Agar bisa dioverride, BentukRambut di class Mamat harus dinyatakan sebagai virtual, jika tidak BentukRambut tidak bisa dioverride. Ini penting untuk menjaga agar tidak sembarangan melakukan override, sebab bisa jadi salah satu sifat Mamat memang tidak boleh dioverride, sifat pemarah misalnya.]

public class Agus:Mamat {
public override string BentukRambut {
get {
return “Lurus bercat merah”;
}
}
}


Ingat Agus dan Mamat diatas adalah class bukan object. Ini perlu saya tekankan agar anda tidak mengacaukan bentuk Agus dan Mamat sebagai class vs sebagai object. Dalam konteks object kita bisa menginstance Agus sebagai Mamat.

Agus agusNasution=new Agus();
Agus agusHarahap=new Agus();


Disini agusNasution dan agusHarahap adalah dua object yang sama yang dibuat dari class Agus yang merupakan turunan Mamat. [Note: jangan kacaukan juga dengan ras batak, sedemikianhingga Nasution dan Harahap satu keturunan—tapi mereka semua tetap turunan manusia kan...]
Karena turunan Mamat maka agusNasution dan agusHarahap bisa kita nyatakan sebagai:

Mamat agusNasution=new Agus();
Mamat agusHarahap=new Agus();


Apakah ini mengakibatkan rambut agusNasution dan agusHarahap menjadi kriting kembali? Tidak. Walaupun dicasting ke Mamat, object aslinya tetaplah dari class Agus yang tentu rambutnya sudah diluruskan.

Sedangkan untuk Pingky, class-class yang membentuknya anda bisa lihat seperti berikut ini:

public abstract class Binatang {
public string AkuAdalah(){
return “Binatang”;
}
}
public abstract class Babi:Binatang {
public int LongTail {
get {
return 10;
}
}
}
public class Pingky:Babi {
public string Warna {
get {
return “Ping”
}
}
}


Dan berikut ini adalah instance dari Pingky:

Pingky siPing=new Pingky();

Console.WriteLine("Aku {0} dengan panjang ekor {1} dan warnaku {2}",siPing.AkuAdalah(),siPing.LongTail,siPing.Warna);


Output dari konsole diatas adalah:

Aku Binatang dengan panjang ekor 10 dan warnaku Ping


Anda bisa melihat contoh lengkap program dibagian sampel[bagian ke dua dari tulisan ini].

Click Here to Read More..

Jumat, Mei 23

Input Controller pattern

Ada dua pattern untuk input controller. Yang paling umum adalah page controller, sebuah objek input controller untuk setiap halaman pada web site kita. Page controller ini dapat sebagai sebuah server page itu sendiri, mengkombinasikan peran view dan input controller.

image Dalam banyak implementasi, page controller membuat segalanya lebih mudah untuk membagi input controller menjadi sebuah sebuah objek yang terpisah. Input controller kemudian dapat membuat model yang cocok untuk mengerjakan processing dan instantiate sebuah view untuk mengembalikan hasil tersebut. Seringnya anda akan menemukan bahwa tidak terdapat one-to-one relationship antara page controller dan view.

Sebuah pemikiran yang lebih seksama adalah bahwa kita mempunyai page controller untuk setiap action, dimana sebuah action adalah sebuah button atau link. Biasanya action berhubungan dengan halaman, tapi adakalanya tidak. Seperti sebuah link yang dapat pergi ke beberapa halaman yang berbeda tergantung kepada beberapa kondisi. Dengan beberapa input controller terdapat dua tanggungjawab, memegang HTTP request dan memutuskan apa yang akan dikerjakan dengan nya, dan seringnya ini membuat sense untuk memisahkan mereka.

 image Pattern kedua, Front controller hanya memiliki satu objek yang menghandle semua request. Controller ini menginterprestasikan URL untuk menggambarkan tipe request yang akan disetujui dan membuat objek terpisah untuk memprosesnya.

Sumber:
1. Page Controller:
http://www.martinfowler.com/eaaCatalog/pageController.html
2. Front Controller: http://martinfowler.com/eaaCatalog/frontController.html

Click Here to Read More..

Pola View

Ada 3 pola di sisi view yaitu: Transform View, Template View dan Two Step View. Disini ada 2 pilihan yaitu:

  1. Menggunakan transform view atau template view (keduanya single stage)
  2. Menggunakan singgle stage atau two step view

Menggunakan Transform View atau Template View

image

Template View. Pola ini dilakukan dengan cara mencampur halaman html dengan script. Script yang disisipkan adalah bagian yang sering berubah di halaman itu, misalnya tanggal. Sisipan ditandai dengan tag yang bukan merupakan tag html. Hanya sedikit platform terkenal yang menggunakan pola ini seperti teknologi server page, diantaranya ASP,JSP,PHP. Pola ini membolehkan kita menyisipkan seluruh bahasa pemrograman kedalam halaman. Kekurangan dari pola ini adalah dapat menyebabkan kode yang berantakan yang menyulitkan pemeliharaan. Sehingga jika menggunakan teknologi server page, kita harus disiplin untuk menjaga logika pemrograman tetap diluar struktur halaman, paling tidak dengan menggunakan objek pembantu.

image

Transform view menggunakan style transform dari program. Contoh yang umum adalah XSLT. Pola ini akan lebih efektif jika kita bekerja dengan domain data dalam format XML atau format lain yang dapat dengan mudah dikonversikan menjadi XML.

 

Menggunakan single stage atau two step view

Single stage view mempunyai satu komponen view untuk setiap screen dalam aplikasi. View ini mengambil domain data tertentu dan menterjemahkannya dalam HTML. Kita dapat menyebutnya one view per screen.

Two stage view memecah proses menjadi dua yaitu menghasilkan logical screen dari domain data dan kemudian menterjemahkannya menjadi HTML. Jadi ada satu first-stage view untuk setiap screen tetapi untuk keseluruhan applikasi hanya ada satu second stage view.

Keuntungan dari two step view adalah untuk tempat tertentu, HTML yang akan dipakai sudah ditentukan. Sehingga perubahan secara global dalam HTML dapat dilakukan dengan mudah karena hanya ada satu objek yang diubah dalam rangka mengubah setiap screen pada tempat tersebut. Tentu saja, keuntungan ini dapat diperoleh jika presentasi logical kita tetap sama, sehingga ini akan bekerja dengan baik pada site dimana screen-screen berbeda menggunakan layout dasar yang sama.

image

Two step view bekerja lebih baik jika kita mempunyai sebuah web applikasi yang servicenya digunakan oleh beberapa customer di front-end, seperti system pemesanan tiket pesawat. Dalam logical screen yang terbatas, setiap front-end boleh mempunyai tampilan berbeda dengan menggunakan second stage berbeda. Dengan cara yang sama anda dapat menggunakan two step view untuk mengatasi alat keluaran yang berbeda, dengan membagi second stage untuk sebuah web browser regular dan untuk sebuah palmtop. Tambahan lagi, batasannya adalah bahwa kita dapat mempunyai two share a common logical screen, yang tidak mungkin jika UInya berbeda, seperti dalam sebuah browser dan sebuah cell phone.

Contoh Two Stage View yang umum bisa anda lihat adalah blog. Second stage view dalam blog diwujudkan dalam halaman pertama. First stage view diwujudkan dalam bentuk widget-widget yang dipasang dihalaman blog, halaman, sidebar, about, dll.

Sumber:

1. Gambar 1: Template View
2. Gambar 2: Transform Panel
3. Gambar 3: Two Step View

Click Here to Read More..

Kamis, Mei 22

"JOE"

Sri Ayu

Bahasa. The language:C#.

Tidak mudah buat herman membujuk Pak Umar agar memperbolehkan Joe memanfaatkan fasilitas Lab Komputer. Namun, dengan segala macam bujukan dan rayuan, akhirnya berhasil juga.

Hari itu Joe menjadi penghuni baru di Lab itu. Ada mungkin 20 komputer, yang terbagi menjadi 2 ruangan. Dan tentu saja Joe bukan satu-satunya orang disitu. Ada banyak lagi orang seperti Joe, entah apa yang mereka kerjakan. Yang pasti Joe harus antri.

Herman berjanji mengajarkan bahasa C#. Jadi mereka janjian bertemu di Lab setelah jam sekolah. Joe sudah ambil antrian dan lama menunggu, Herman belum manampakkan batang hidungnya.

“Hai, Sri, Tumben baru datang.” Penjaga ruang komputer nampak berbinar-binar. Setiap laki-laki normal wajar jika bertingkah aneh seperti itu didepan seorang gadis cantik. Sama seperti Joe, gadis bernama Sri itu juga baru datang, juga harus ambil antrian. Sejurus kemudian dia duduk di samping Joe. Tentu saja Joe sedikit berdebar. Sama dengan penjaga komputer, Joe lelaki normal, namun dari jenis yang hanya mampu curi-curi pandang.

Ketika Herman datang mereka langsung menuju komputer paling pojok di sudut ruangan. Rupanya Herman lebih cangggih dari siapapun di ruangan itu. Dia kongkalingkong dengan penjaga komputer, entah ini disebut kecerdikan atau kelicikan.

Herman bercerita, bahasa komputer sama halnya dengan bahasa manusia. Ada aturan tata bahasa, juga kosa kata dan kamus. Tidak serumit bahasa manusia bahasa komputer jauh lebih sederhana.

Kalimat-kalimat dalam bahasa C# selalu diakhiri dengan titik koma “;”, dalam bahasa manusia kalimat selalu diakhiri dengan titik. Kosa kata dalam bahasa C# tidak lebih dari 100 kata, diantara yang paling sering digunakan adalah:

  • class
  • do
  • else
  • false
  • for
  • if
  • int
  • new
  • null
  • private
  • protected
  • public
  • return
  • static
  • string
  • this
  • true
  • using
  • void
  • while

“Joe, C# adalah bahasa yang case-sensitive, kamu harus memperlakukan huruf besar dan kecil sebagai sesuatu yang berbeda.”

“Joe, kamu dengar tidak?” Joe tergagap, tersadar dari lamunan. “Saya tahu Joe, dari bahasa tubuhmu aku bisa tahu, kalau kamu sedang naksir perempuan.” Ledek herman. “Tak usah difikirkan, dia tetanggaku, pasti kamu ingin kenalan bukan.” Wajah Joe semakin menghitam.

“Kembali ke komputer. Saya ulangi, C# itu bahasa case-sensitive.” Joe manggut-manggut. Herman terus saja nyercos. Sementara komputer menunjukkan screen-saver.

Dalam bahasa manusia, kalimat-kalimat disusun dalam satu paragraph, yang juga menunjukkan satu inti makna. Demikian juga dalam bahasa C#, kalimat-kalimat dikelompokkan dalam blok-blok yang diawali dengan tanda kurung kurawal “{“ dan diakhiri dengan kurung tutup “}”.

“Ok. Sekarang saya akan buat contoh.”

“Tunggu sebentar.” Sela Joe. “Program akan dibaca oleh orang lain, paling tidak guru saya nanti. Adakah sebuah cara untuk catatan dan itu bukan bagian dari program.”

“Pertanyaan yang bagus Joe. Untuk keterangan satu baris kamu harus memberikan dua tanda garis miring “//” didepan keterangan. Untuk keterangan yang berbentuk blok, kamu harus member tanda garis miring dan bintang diawal “/*” blok dan diakhiri dengan tanda bintang diikuti garis miring diakhir blok.

“Cukup jelas Joe?”

“Jelas”

“Ok. “

Herman membuka Visual Studio Expreess 2008, membuat project baru bertipe Applikasi Konsol. Kemudian menuliskan program berikut ini:

namespace Herman.Joe.ExLang
{
   
class Program
   
{
      
static void Main(string[] args)
      
{
         
System.Console.WriteLine("Hello Joe");
         
System.Console.ReadLine();
      
}
   
}
}

“Joe, lihat, program selalu diawali dengan ‘{‘ dan di akhiri dengan ‘}’. Ada tiga blok program. Blok pertama disebut sebagai blok namespace. Blok kedua disebut blok class dan blok ketiga disebut blok method.”

“Blok yang berisi perintah sebetulnya hanya ada di blok method. Sedangkan blok yang lain berfungsi untuk pengelompokan.”

“Sebentar Mas Herman, apa yang dimaksud dengan namespace, class, dan method? Pengaruhnya apa terhadap pengelompokan?”

“Begini, ruang tempat komputer ini pasti dibuat dengan jasa arsitek. Orang arsitek mendesign rumah ini dengan gambar. Orang menyebutnya sebagai cetak biru. Kemudian orang sipil membuat bagunan berdasarkan gambar itu. Dalam C# cetak biru segala bentuk bangunan adalah class. Berdasarkan class-class itu kita buat object/bangunan.”

“Setiap rumah pasti punya fungsi-fungsi. Pintu, jendela, saluran air, listrik, atap dan lain-lain adalah fungsi-fungsi. Dalam istilah pemrograman semua itu disebut sebagai method. Method adanya selalu di dalam class.”

“Rumahku, rumahmu, dan gedung ini, semuanya ada pintunya bukan? Ketika seseorang memintamu untuk membuka pintu, jika kamu tidak mengetahui konteksnya pasti kamu bakal tanya, pintu yang mana? Nah, itulah gunanya namespace, mengelompokkan untuk memudahkan dalam mengarahkan, agar tidak salah buka pintu. Herman.Rumah.Pintu.Buka, jelas ini rumah saya. Jika saya hanya bilang Pintu.Buka, ini tidak jelas pintu yang mana dan punya siapa.”

“Oh ya saya lupa. Untuk mengakses dari satu blok ke blok berikutnya digunakan ‘.’ (dot). Jadi dalam kasus kita diatas untuk mengakses method Main, kita menyebutnya dengan Herman.Joe.ExLang.Program.Main.”

“Mengapa mesti Main()? Ada maksud khusus?”

“Oh ya, dalam C# method Main() wajib ada. Main adalah entry-point, titik masuk program. Titik tempat program mulai dijalankan. Komputer akan mencari dimana dia berada. Jika tidak ada program tidak akan jalan.”

“Jelas?”

“Ok”

“Sekarang perhatikan blok method dari Main(). Ada dua kalimat perintah disana. Perhatikan setiap perintah selalu diakhiri dengan ‘;’. Kedua perintah itu berada dalam namespase System dibawah class Console. Perintah WriteLine memerintakan komputer menulis ‘Hello Joe’ ke layar konsol. Perintah ReadLine, memerintahkan komputer untuk menunggu user mengetikkan sesuatu dan diakhiri dengan menekan tombol enter.”

“Jelas Joe?”

“Ok. Ngerti. Ee… tapi bagaimana dengan komentar?”

“Ok. Saya tambahkan komentar.” Herman kembali ke komputer dan mengetikkan sesuatu.

namespace Herman.Joe.ExLang
{
   
class Program
   
{
      
static void Main(string[] args)
      
{
         
System.Console.WriteLine("Hello Joe. Apa kabar?");
        
//Menunggu Joe mengetikkan sesuatu dan menekan enter
       
System.Console.ReadLine();
       
/* Joe
          
Sampai disini dulu ya
          
Sampai besok
       
*/
     
}
  
}
}

“Lihat, ada dua macam komentar. Yang sebaris cukup dengan ‘//’, yang banyak baris dengan /* dan diakhiri dengan */. Tapi kamu harus bijak. Terlalu banyak komentar juga tidak baik, hanya akan mengotori program. Alangkah bagusnya jika kata-kata yang kamu pilih sebagai variabel mengandung makna-makna dalam konteks yang tepat. Dengan demikian komentar tidak diperlukan.”

“Variabel. Apa itu?”

“Besok kita akan bahas itu. Si dia kelihatannya sudah mau pulang. Kenalan dan berikan kesan.”

Bagaimanapun juga Joe, tetaplah Joe. Dia hanya mampu mengikutinya dari belakang. Takut tidak bisa keluar kata-kata.

Click Here to Read More..

Rabu, Mei 21

Model View Controller (MVC)

                                                    

imageDalam tulisan Web Presentation Layer telah disinggung bagaimana web bekerja. Semakin besar dan kompleks sebuah applikasi yang dibangun diatas web server, akan menghasilkan program yang rumit dan sulit dimaintain.

Oleh karena itu orang kemudian memisahkan program menjadi beberapa bagian. Masing-masing bagian memiliki peranan khusus. Pola yang paling digemari dan terkenal adalah Model View Controller(MVC).

Dalam MVC program dibagi menjadi 3 bagian, model, view, controller. Model mewakili bisnis logik. View mewakili interface untuk user, seperti form, grafik atau report. Model bisa memiliki lebih dari satu view. Controller memproses event dan aksi user yang merupakan penghubung antara model dan view.

Berikut ini adalah gambar sequence diagram MVC dari buku Patterns of Enterprise Application Architecture (PoEAA) Martin Fowler:

clip_image002[12]

Sebuah request masuk ke sebuah input controller, yang memasukan informasi tentang request. Kemudian dia meneruskan bisnis logic ke objek model yang sesuai. Kemudian objek model berbicara dengan data source dan melakukan segala yang diinginkan. Setelah selesai objek model mengembalikan kendali ke input controller, yang melihat hasil dan memutuskan view mana yang diperlukan untuk menampilkan response. Input controller kemudian meneruskan kendali, bersama dengan response data ke view.

Alasan pertama dan paling penting untuk mengaplikasikan Model View controller adalah untuk meyakinkan bahwa model dipisahkan secara lengkap dari web presentation. Hal ini memudahkan untuk memodifikasi presentasi semudah menambahkan presentasi nantinya. Meletakan proses kedalam objek transaction script atau objek domain model yang terpisah akan memudahkan untuk mengujinya dengan baik. Hal ini penting jika kita menggunakan sebuah server page sebagai view.

Dititik ini kita bahas istilah “controller”. Banyak desain-desain user interface memisahkan objek presentasi dari objek domain dengan layer tengah adalah objek Application controller. Tujuan Application controller adalah menangani aliran sebuah aplikasi, memutuskan screen mana yang sebaiknya muncul dalam urutan mana. Screen ini muncul sebagai bagian dari presentasi layer atau sebagai layer pemisah antara presentation layer dan domain layer. Application controller dapat dituliskan sehingga dia bebas dari presentasi khusus yang manapun, dalam kasus ini, dia dapat digunakan kembali oleh banyak presentasi. Hal ini akan bekerja baik jika anda mempunyai presentasi yang berbeda dengan aliran dasar dan navigasi yang sama, walaupun akan lebih baik untuk mendefinisikan presentasi yang berbeda dengan aliran yang berbeda.

Tidak semua system membutuhkan application controller. Controller ini akan berguna jika system anda mempunyai banyak logic tentang urutan screen dan navigasi diantaranya. Berguna juga jika anda belum memperoleh mapping sederhana antara halaman anda dan aksi di domain. Tetapi jika seseorang dapat melihat banyak screen dalam urut-urutan, maka sedikit keperluan anda terhadap application controller. Cara menguji yang terbaik adalah, jika mesin ada dalam sebuah control dari aliran screen, maka anda memerlukan application controller, jika user ada dalam control, maka tidak perlu.

Berikutnya kita akan bahas lebih jauh mengenai view dan controller.

Sumber:
1. PoEAA,  Martin Fowler
2.
http://en.wikipedia.org/wiki/Model-view-controller

Click Here to Read More..

Senin, Mei 12

Web Presentation Layer

webserver Perubahan besar yang terjadi pada applikasi skala besar (enterprise) adalah penggunaan web sebagai user interface. Kelebihan web dibanding applikasi berbasis windows form adalah kemudahan dalam instalasi applikasi di komputer pengguna (client). Dengan web kita cukup menginstall applikasi disatu tempat yaitu server, sementara para pengguna applikasi cukup menggunakan browser, misalnya firefox atau internet explorer atau yang lainnya.

Applikasi tidak begitu saja diletakkan didalam server, paling tidak didalam server itu harus ada Web Server. Web Server bertindak sebagai jembatan antara client dengan applikasi. Applikasi diletakkan dalam Web Server. Cara meletakkannya adalah dengan meletakkan URL di file konfigurasi dari Web Server. Ketika client melakukan request suatu action Web Server akan memeriksa applikasi mana yang akan dituju berdasarkan URL. Setelah ditemukan, Web Server akan mengeksekusi applikasi dan hasilnya dikembalikan ke client yang merequest action. Contoh Web Server, IIS atau Apache.

Ada dua macam applikasi yang bisa diletakkan di Web Server: Script dan Server Page. Contoh applikasi yang berbasiskan script yaitu aplikasi-aplikasi yang ditulis dalam bentuk CGI dan Java Servlet. Script-script ini berisi subroutin-subroutin yang mempunyai kemampuan sama dengan program, selain itu dia juga bisa memanggil servise-service lain dalam server. Output dari script adalah halaman html yang akan dikembalikan ke client untuk dibaca oleh browser.

Untuk membuat keluaran applikasi berbasis script programmer harus menulis ke sebuah stream, baik berupa html, image, plain text atau sekedar reference. Melakukan hal ini adalah sulit  bagi kebanyakan programmer apalagi yang bukan programmer. Karena itu muncullah ide Server Page.

Dengan server page, programmer mula-mula meyiapkan halaman html kemudian menaruh script didalam halaman itu. Contoh dari cara ini adalah dengan memasukan script PHP, ASP dan JSP.

WEBSERV2

Sumber:
1. PoEAA, Martin Fowler
2. Gambar 1:www.indocomerce.net
3. Gambar 2:http://content.answers.com

Click Here to Read More..