Kenapa Design Pattern ini muncul ?

Karena memang orang ingin membuat sebuah solusi elegan terhadap permasalahan yang berulang terjadi ketika membuat sebuah aplikasi.

kembali lagi ke definisi Elegan :

Elegan adalah solusi dengan tingkat kompleksitas yang rendah, tapi dengan efisiensi dan efektifitas yang tinggi, untuk kasus masalah dengan kompleksitas tinggi/rumit.

Dalam dunia Engineering/Rekayasa, apalagi dalam dunia IT, membuat solusi yang elegan adalah keniscayaan. Karena didalamnya ada metoda ilmiah yang dipakai, teori matematika yang diterapkan, atau konsep desain yang berjalan bagus untuk kasus-kasus yang serupa, dan terbukti sejalan dengan waktu.

Karena itulah muncul Desain Algoritma, Design Pattern, dan Desain Arsitektur aplikasi.

Masing-masing merupakan desain dengan tujuan yang agak berbeda pada tingkatan nya. Desain Algoritma pada level algoritma dan teknis, Design Pattern pada level kerangka desain solusi, dan Desain Arsitektur aplikasi pada level komponen arsitektur aplikasi.

Design Pattern dan Desain Arsitektur aplikasi masih menjadi perdebatan mengenai batasannya. Karena keduanya memang membahas mengenai hal yang sama yaitu kerangka desain dan solusi umum.

Kenapa solusi dalam bentuk algoritmik tidak dianggap sebagai Design Pattern ?

Contohnya solusi divide and conquer seperti yang kita gunakan di algoritma MergeSort, BinarySearch, QuickSort, dll kenapa sering dianggap bukan sebagai Design Pattern ?

Hal ini karena konsep nya ini terlalu low level sehingga dianggap sebagai desain teknis dan bukan lagi kerangka desain seperti design pattern. Akan tetapi banyak juga yang menganggap desain algoritma dan design pattern itu sebenarnya sama saja. Sudut pandang mengenai detail desainnya nya ini yang membedakan pengelompokannya.

Sejarah

Asal Ide dari Design pattern

Awal ide Design Pattern ini adalah dari Christopher Alexander, seorang Insinyur Sipil yang menulis pengalamannya dalam menyelesaikan persoalan desain waktu membangun gedung, perumahan dan kota. Bangunan yang di desain olehnya sekitar 200 kelompok bangunan, gedung, perumahan.

Christopher Alexander menuliskan pengalaman dan best practice yang dilakukan untuk bisa dipelajari dan dipakai oleh Insinyur Sipil lain. Pada tahun 1977, Christopher menulis buku A Pattern Language, yang didalamnya mendeskripsikan bagaimana mendesain gedung, perumahan dan komponen penunjangnya tergantung dari lingkungan yang dihadapi. Bagaimana jendela harus ditempatkan, berapa tinggi lantai gedung, dimana posisi pintu seharusnya tergantung dari lingkungannya yang dihadapi. Terdapat 253 pattern yang dideskripsikan di buku tersebut.

Pattern Language adalah kumpulan pattern yang dideskripsikan oleh Christopher Alexander untuk kasus pembangunan gedung, kompleks perumahan, dan lingkungan tersebut. Kalau mau lihat versi online nya di link ini : Pattern Language

Apa quote dari Christopher Alexander ?

Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.

– Christopher Alexander

Tiap pattern dalam buku ini menggambarkan kasus berulang yang terjadi di lingkungan kita, beserta solusi untuk kasus itu, disajikan dengan cara yang elegan sehingga solusi ini bisa digunakan berkali-kali

– Christopher Alexander

Christopher Alexander hanya mendeskripsikan ini sebagai Pattern. Tetapi konsep dan cara pengkategorisasion di dalam bukunya ini bisa diterapkan dalam disiplin ilmu yang lain, termasuk didalamnya untuk dunia Software Engineering.

Quote selanjutnya

How can you distribute responsibility for design through all levels of a large hierarchy, while still maintaining consistency and harmony of overall design ?
– Christopher Alexander

Bagaimana caranya mendistribusikan beban tanggung jawab desain ke semua tingkatan, dengan tetap menjaga konsistensi dan harmonisasi desain secara keseluruhan ?
– Christopher Alexander

Quote diatas juga mirip dengan apa yang terjadi di Pengembangan Aplikasi. Dimana kita akan mencari cara untuk mendistribusikan logic aplikasi kita ke berbagai tingkatan/layer.

Di bukunya Christopher Alexander mengusulkan Pattern Language yaitu kumpulan terminologi yang menggambarkan sebuah paket desain untuk kasus tertentu.

The Pattern Language tidak menjelaskan bagaimana untuk mendesain untuk semua kasus. Tetapi mendefinisikan apa yang seharusnya membutuhkan desain dalam kasus membangun kota, pemukiman, jalan, atau gedung. Misalnya bagaimana seharusnya sebuah jalan tol dibangun, bagaimana kota satelit berlokasi, dll.

Ide diatas menjadi inspirasi bagi 4 orang ilmuwan IT yang menggeluti dunia Software Engineering oleh yaitu Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, untuk menulis buku Design Pattern : Element of Reusable Object Oriented Software pada tahun 1994. Keempat orang diatas terkenal sebagai Gang Of Four (GOF).

Ada juga buku lainnya yang sezaman yang mengangkat hal yang sama seperti buku Pattern Languages of Program Design oleh Coplien & Schmidt)

Quote Gang Of Four (GOF) di buku mereka

A design pattern systematically names, motivates, and explains a general design that addresses a recurring design problem in object-oriented systems. It describes the problem, the solution, when to apply the solution, and its consequences. It also gives implementation hints and examples. The solution is a general arrangement of objects and classes that solve the problem. The solution is customized and implemented to solve the problem in a particular context.

– Design Patterns : Element of Reusable Object Oriented Software

Design pattern merupakan desain umum yang berkaitan dengan masalah desain yang berulang di sistem berorientasi objek. Didalamnya terdapat definisi masalah, solusinya, kapan menggunakannya, dan konsekuensinya. Didalamnya juga disertakan contoh dan petunjuk implementasi. Solusi yang ditawarkan juga lebih kepada bagaimana mengatur secara umum objek dan class yang dibuat untuk menyelesaikan permasalahan aplikasi. Solusi ini juga bisa dimodifikasi dan diubah seperlunya untuk menyelesaikan masalah yang mirip dengan batasan tertentu.

– Design Patterns : Element of Reusable Object Oriented Software