Intro Framework
Posted on August 11th, 2006 | by Endy Muhardin |Hari ini di milis jug ada yang bertanya tentang framework. [Si penanya][] sendiri kelihatannya mengerti tentang framework, tapi kesulitan menjelaskan kepada orang lain.
Ini umum terjadi, apalagi kalau programmer Java berbicara dengan programmer dari dunia lain, seperti PHP, C, C++, dsb. Ini bisa disebabkan karena penggunaan framework tidak umum di dunia lain tersebut, atau simply karena programmer lain tersebut fakir bandwidth, sehingga gak aware terhadap tren terbaru.
Baiklah, mari kita bahas framework. Framework, sesuai dengan terjemahannya, adalah kerangka kerja. Jadi, di dalam framework ada beberapa kode program yang kalau kita gunakan, akan memberikan kerangka atau struktur ke aplikasi yang dihasilkan. Singkatnya seperti itu. Nanti akan lebih jelas setelah kita lihat contoh kasus dan contoh kode.
Untuk memahami framework, mari kita lihat ke dunia yang minim framework, yaitu PHP. Sebelum tahun 2005-2006 ini, (setau saya) programmer PHP di Indonesia masih asing dengan framework.
Misalnya saya buat aplikasi shopping cart. Aplikasi yang sangat umum dalam PHP. Setidaknya saya pernah mencoding ulang shopping cart minimal tiga kali. Dan semuanya arsitekturnya beda.
Pertama, waktu masih belajar. Semua kode campur aduk jadi satu. Kalau ada perubahan warna font, beberapa kode SQL harus ikut diupdate. Ubah nama tabel, 7 file kode harus diedit. Singkatnya, perubahan sedikit saja memaksa saya mengubah di banyak tempat di kode program.
Kemudian, setelah semakin banyak pengalaman, saya mulai memisahkan kode HTML dengan kode SQL. Dengan ini, aplikasi bisa berganti wajah dengan mudah. Cukup edit satu file konfigurasi, tampilan berubah seketika.
Terakhir, saya mulai mempertimbangkan multi bahasa. Semua string yang berkaitan dengan label, dikeluarkan dalam satu file sendiri. Jadi kalau kita mau ganti bahasa, cukup bikin replika file tersebut, dan terjemahkan. Kemudian edit file konfigurasi, dan bahasa berubah seketika.
Rapi dan bersih ..
Setelah mendapatkan struktur yang optimal, saya mulai me-reuse struktur tersebut. Kapan-kapan membuat aplikasi baru, saya akan langsung memisahkan kode HTML, SQL, dan bahasa.
Skenario di atas terjadi karena saya tidak menggunakan framework. Butuh banyak sekali trial and error buat saya sampai menemukan struktur yang rapi dan bersih. Setelah ditemukan, struktur tersebut saya jadikan framework. Kerangka untuk membuat aplikasi selanjutnya.
Sekarang kita pindah dari dunia yang minim framework, ke dunia yang kebanjiran framework, Java.
Di dunia Java, kelihatannya orang sangat suka coding framework, sehingga kalau kita search di sourceforge, mungkin lebih banyak framework daripada aplikasi siap pakai. Mengapa ini terjadi, saya tidak tahu. Yang jelas, kalau kita akrab dengan Java, pasti akan pakai framework.
Framework yang ideal harusnya merupakan intisari dari best practices. Pengalaman bertahun-tahun membuat aplikasi yang mirip, disimpulkan dan dibakukan menjadi framework siap pakai. Tapi saking banyaknya framework di Java, akhirnya banyak juga framework sampah. Artinya, dibuat bukan dari best practices dan experiences, tapi lebih menjadi ajang belajar membuat framework.
Penggunaan framework hasil belajar seperti ini sangat buruk dampaknya. APInya tidak stabil, sehingga kalau framework tersebut menerbitkan edisi baru, kode program kita harus diubah semua. Tentu saja, karena framework merupakan kerangka utama. Jadi kalau kerangkanya berubah, maka seluruh aplikasi akan terpengaruh. Selain itu, strukturnya juga belum terbukti keandalannya. Masalah sederhana menjadi kompleks, waktu banyak terbuang untuk ‘mengurusi’ framework.
Menggunakan framework jelek lebih fatal akibatnya daripada tanpa framework.
Sampai sejauh ini, harusnya sudah ada gambaran tentang framework.
Framework vs Library
Jangan keliru membedakan framework dengan library. Framework, by definition, sangat invasif. Dia memaksakan bagaimana kita harus coding, bagaimana memberi nama class, di mana harus meletakkan file, dan banyak aturan-aturan lain. Sedangkan library, tinggal baca dokumentasi, daftar function, input dan output masing-masing function, selesai.
Dengan demikian, menggunakan framework lebih sulit daripada library.
Coba kita bedakan framework dengan library
Framework Java:
* [Spring Framework][]
* [Struts][]
Library Java:
* [Joda Time][]
* [JFreeChart][]
* [Freemarker][]
* [Jakarta Commons][]
Framework PHP:
* [Seagull][]
* [Cake][]
Library PHP:
* [PEAR][]
* [AdoDb][]
* [Smarty][]
Ada lagi satu kategori, yaitu toolkit. Toolkit adalah kode yang kita gunakan dalam development, tapi tidak disertakan dalam produk akhir. Contohnya di Java antara lain: [Ant][] dan [CruiseControl][].
Tapi ada juga beberapa yang tidak jelas pengelompokannya. JUnit misalnya, di satu sisi, dia menyediakan perlengkapan untuk testing sehingga bisa dikategorikan sebagai library. Di sisi lain, dia mengharuskan ada prefix test di setiap nama method, sehingga layak disebut framework.
Plus Minus
Sekarang pertanyaan yang penting. Apa keuntungan dan kerugian menggunakan framework? Asumsikan framework yang ingin digunakan bagus dan teruji.
Keuntungan
* Struktur yang konsisten. Sangat berguna bila developer banyak dan turnover tinggi.
* Struktur merupakan best practices. Semua sudah ditempatkan di tempat yang paling sesuai.
* Dapat belajar tentang desain aplikasi yang baik.
Kerugian
* Butuh investasi waktu belajar dan adaptasi
* Ada overhead. Untuk project sangat kecil, mungkin overheadnya lebih besar dari projectnya sendiri. Lagipula, tidak semua fitur framework kita pakai, sehingga cuma akan menjadi bloat.
* Menimbulkan dependensi. Ini terutama terasa di aplikasi yang berarsitektur plugin. Upgrade framework dapat merusak plugin.
Memilih Framework
Sekarang, bagaimana kita memutuskan pakai framework atau tidak? Kalau pakai, pilih yang mana? Sering sekali ada banyak framework yang menyelesaikan masalah yang sama.
Pertama, pertimbangkan benefit vs cost.
Di beberapa project, saya lebih memilih tanpa framework, karena ukuran projectnya kecil.
Untuk [playbilling][], saya pakai [iBatis][] alih-alih [Hibernate][] yang lebih lengkap fiturnya. Pertimbangannya adalah, saya tidak menggunakan banyak tipe database. Sehingga cross-database tidak terlalu dibutuhkan. Sekarang saya sedang mempertimbangkan menghilangkan [iBatis][], dan pakai JDBC biasa untuk mengurangi dependensi dan ukuran donlod.
Kedua, lihat kualitas dokumentasinya.
Alasan yang jelas adalah, kalau tidak ada dokumentasi, gimana tau cara pakainya? Kita butuh dokumentasi untuk bisa menggunakan framework.
Ada alasan kedua yang juga penting. Kualitas dokumentasi mencerminkan kualitas framework. Mengapa? Karena dokumentasi biasanya adalah by product (produk sampingan), apalagi di project open source. Logikanya, jika tim developer menghasilkan dokumentasi bagus, pasti kualitas dan desain frameworknya sendiri lebih bagus lagi.
Sejauh ini, kesimpulan saya konsisten. Framework terbaik secara desain dan kualitas kode adalah [Spring Framework][]. Coba lihat dokumentasinya. Sangat rinci, detail, dan minim kesalahan.
Contoh lain adalah [Hibernate][]. Dokumentasinya sangat lengkap. Bahkan di dalamnya juga dijelaskan tentang konsep Object Relational Mapping. Dengan membaca dokumentasinya saja, kita akan menambah wawasan. Apalagi menggunakan frameworknya.
Ketiga, lihat aktivitas komunitasnya.
Framework, apalagi open source, membutuhkan interaksi dengan sesama pengguna. Keuntungan utama tentu saja technical support dan tutorial gratis. Apalagi dengan perkembangan blog yang sangat pesat beberapa tahun terakhir. Semua pengalaman baik, buruk, mudah, sulit, semua diceritakan para pengguna framework di blognya masing-masing.
Kalau kita menggunakan framework minoritas, jarang digunakan orang, tutorialnya sedikit, diskusi di berbagai forum juga tidak banyak. Jadi, kalau kita search dengan [Google][], lebih sulit menemukan permasalahan (dan solusi) yang sama dengan kebutuhan kita.
Terakhir, learning curve, atau kurva belajar. Apakah framework tersebut sulit atau mudah dipelajari?
Di bagian atas tadi saya menyebutkan keunggulan framework adalah dia dapat menyeragamkan struktur kode di antara banyak developer. Jadi, agar efektif, semua developer harus bisa menggunakan framework tersebut.
Nah, seorang system architect, software designer, senior developer, development team leader, atau apapun istilahnya di tempat Anda, orang yang bertugas memilih framework, harus mempertimbangkan kurva belajar ini.
Ini sering diabaikan banyak orang. Sebagai pemilih framework, tentunya orang tersebut memiliki keahlian/pengalaman teknis di atas rekan-rekannya. Penting bagi orang tersebut untuk memperhitungkan keahlian/pengalaman anggota tim yang lain yang tidak secanggih dirinya pada waktu memilih framework. Jangan sampai framework yang dipilih terlalu rumit, sehingga bukannya di-reuse malahan di-abuse.
Demikian ulasan singkat tentang framework. Mudah-mudahan bermanfaat.
[Si penanya]: http://dwiardiirawan.blogs.or.id
[Spring Framework]: http://www.springframework.org “Spring Framework Home Page”
[Hibernate]: http://www.hibernate.org “Hibernate Home Page”
[Joda Time]: http://joda-time.sourceforge.net/
[Google]: http://www.google.com “Oom Google”
[JFreechart]: http://www.jfree.org/jfreechart/
[Seagull]: http://seagullproject.org/
[Cake]: http://cakephp.org/
[iBatis]: http://ibatis.apache.org
[CruiseControl]: http://cruisecontrol.sourceforge.net/
[playbilling]: http://playbilling.sourceforge.net
[Smarty]: http://smarty.php.net/
[PEAR]: http://pear.php.net/
[AdoDb]: http://adodb.sourceforge.net/
[Ant]: http://ant.apache.org
[Jakarta Commons]: http://jakarta.apache.org/commons/index.html
[Freemarker]: http://freemarker.sourceforge.net
[Struts]: http://struts.apache.org
25 Responses to “Intro Framework”
By toni on Aug 12, 2006 | Reply
Good points
By dhiku on Aug 14, 2006 | Reply
lalu framework dengan design pattern? kalo memang framework adalah berdasarkan struktur yg sudah pernah kita buat. apa bedanya dengan design pattern? mungkin bisa dibilang framework mengimplementasikan design pattern, yg merupakan best practices atau seperti katalog dari permasalahan2 yg muncul pada saat development..
just my opinion
By Andry on Aug 17, 2006 | Reply
Saya juga suka Spring. Alasan saya bukan pada cara pikir IoC, tapi semangat Spring untuk tidak membuat DIY framework. Misalnya saja, menggunakan Log4J/Log4N untuk logging.
Dan tentang framework : makin banyak layer (abstraksi) akan semakin fleksibel tapi makin lambat dan susah untuk pemula. Itu trade-off-nya tapi sering diadu dengan payoff aplikasi skala enterprise, err, besar.
Saya suka framework. Tapi yang saya amati mereka ini banyak bloatingnya ketimbang fungsi. Arsitektur aplikasi bolehlah cantik, tapi pada kenyataannya end-user tidak peduli dengan perdebatan OR/M vs. Entity-approach yang ditempuh kita.
Saya dulu maniak framework. Menempatkan pattern disana-sini secara efektif, menambah layer diatas layer sampai mengedit berkas konfigurasi bertipe XML dengan tangan kosong dst dst memang mengasyikan. Tapi, fokus framework (pattern, practices, bla-bla-bla driven development, yadda-yadda-yadda domain design) adalah pada sisi developer. Bukan pada end-user.
Misalnya, Swing. Secara arsitekur, Swing memang hebat. Tapi terus terang saya lebih memilih Visual Basic 6 untuk urusan GUI. Ga apa-apa deh dicap tidak “object-oriented” asal tujuan terpenuhi.
Contoh lagi, ASP.NET 2.0. Keren, mudah, tidak njlimet buat developer. Tapi output akhirnya, HTML + CSS + JS, malah kacau balau. Tidak ada kesepakatan semantik XHTML, tidak ada kesepakatan label antara server-side dan client-side control, tidak bisa mengumpulkan semua JS dalam satu file karena memang tidak mungkin (flaw by design).
Kalau boleh saya ambil generalisasi, framework dibuat untuk memudahkan hidup developer tapi tidak untuk kehidupan end-user.
By Agus Suhartono on Aug 17, 2006 | Reply
buat mas Addry
contoh framework untuk native programming, bisa dicek delphi, ada banyak class yang dibuka code-nya, silahkan dibedah. Dari konsep delphi ini kemudian muncul lazarus dengan freepascal
dan hasilnya, delphi jauh lebih handal dibandingkan vb, baik kecepatan maupun desain arsitektur.
tidak bisa lah membandingkan vb dengan swing, swing lambat karena dirender pake JVM juga. kalo mau coba pake swt
memang bagi yang terbiasa dengan Model Delegate, pemakaian Model View Controler rada sulit, saya juga merasakan kok.
Akhirnya, penggunaan mau pake framework apa tidak tergantung kebutuhan.
By Andry on Aug 17, 2006 | Reply
Mas Agus,
VB kan pada perspektif tertentu juga framework. Saya tidak membela VB, saya malah tidak menganjurkan memakainya karena alasan like/dislike (saya lagi keranjingan RCP).
Delphi juga bagus. Saya pakai Delphi semenjak Delphi 1. Setelah versi 5 keatas sudah tidak lagi karena tuntutan pekerjaan
Inti yang ingin saya sampaikan, framework yang ada dipasaran saat ini dibuat dengan mindset bahwa semua software diperuntukan kepentingan Enterprise.
Seolah-olah semua project adalah untuk Fortune 500 company. Padahal pada realitas (setidaknya yang saya hadapi), kebutuhan software jauh lebuh besar untuk Fortune 5.000.000 (baca : kelas menengah kebawah).
Belum lagi hype seperti MVC, MPP, MDD. Saya yakin orang-orang ini, software architect yang lupa membumi, sedang merencanakan sesuatu bernama “Core Foundation Framework” (hehe, bercanda…
)
Itulah yang saya rasa saat ini. Saya sedang alergi kata “Enterprise”. Saya malah belajar kembali dasar algoritma dan struktur data memakai C.
Buat Mas Endy, maaf, saya tidak ada maksud menginisialisasi perang antar “umat beragama”. Saya rasa itu cukup di milis saja
By Endy Muhardin on Aug 22, 2006 | Reply
No problem …
Namanya juga discussion.
Setelah ‘berkelana’ di dunia framework, kesimpulan (sementara) saya adalah:
Menggunakan framework secara minimalis. Bukan apa-apa, banyak framework membatasi fleksibilitas kita dalam membangun tim developer. Soalnya satu framework saja butuh learning curve. Apalagi satu aplikasi pakai tiga sekaligus (misal: Tapestry, Spring, Hibernate dipake semua
)
Walaupun tidak dipakai untuk production, belajar framework tetap penting untuk semua programmer, tanpa kecuali. Gunanya untuk meng-upgrade pola pikir. Saya menjadi ‘better developer’ setelah belajar Hibernate, karena jadi tau tentang Object Relational Impedance Mismatch. Saya juga menjadi lebih tau bagaimana cara merangkai aplikasi, setelah belajar Spring Framework. Dari Ruby on Rails, saya belajar tentang keindahan convention over configuration. Acegi Security mengajarkan the power of extensibility kepada saya.
The point is … keep on learning.
By arie on Sep 2, 2006 | Reply
First off, i’d say wew good points, selanjutnya… harap maklum, ini komen orang ngantuk tapi ga bisa tidur tidur juga ihik ihik
Ini CAPTCHA ala blog site Pak Endy yang diberikan pada Pak Arie: Berapa hasilnya 0 ditambah 8? Pak Arie Jawab 8, demi validatesofcaptcha
Ini CAPTCHA ala Arie Ngantuk tapi ga bisa tidur tidur tapi tetap memaksa tidur biar bisa tidur walau sambil coding: Bukan nanya berapa hasilnya bila ditambah berapa, tapi mo nambah begitu :”> dari Rails jadi belajar DRY, MVC ala DHH (Karna ada juga yang nggak kek DHH, seperti Seaside ataupun Django), jadi belajar curiga akan baris baris coding yang panjang… jangan jangan bukan ruby way nih, karna ada duck typing dan ngotot DHH akan DRY seperti code ini self.permalink = title.tos.downcase.strip.gsub(/[^-\s[:alnum:]]/, ”).squeeze(‘ ‘).tr(‘ ‘, ‘_’) if permalink == “”
) kalau the point is .. keep learning, wah gimana kalau buka usaha saja: seperti mendirikan 100 fotokopi di kota surabaya begitu, kan penghasilannya OK. :-B
jadi belajar untuk banyak ketawa, habis dunia ruby, apalagi rails, bahasanya manusiawi banget gitu, learning curve nya jadi cepat, trus jadi gampang banget + baris code nya pendek-pendek … tapi sayangnya kekurangan cerita lucu biar bisa ketawa, akhirnya ketawa aja sendiri. permasalahan yang sangat jadi masalah adalah ruby masih teknologi baru, rails juga.. jadi kekurangan orang. Lihat aja tuh porting Ruby untuk Symbian. Sepi sepi aja tuh. Padahal khan ogut alih alih beli Treo 650 ato 700 pake Palm kalo kurang bisa dihack seperti Symbian mending pilih Symbian. Jadi bingung mo pilih yang mana nih.. d’uh sori ngelantur jadi curhat pribadi
kaburr mo pejam lagi biar bisa tidur … zzzzz
By SURYANTO on Feb 4, 2007 | Reply
SAYA LAGI KEMBAGIN SOFTWARE JAVA; KALAU ADA BAHAN / ILMU JAVA TOLONG DIEMAIL KESAYA YACH, THANK’S
By Endy Muhardin on Feb 7, 2007 | Reply
Ikut aja milis jug-indonesia@yahoogroups.com
By TAUFIK on Apr 19, 2007 | Reply
TENGKYU FOR TUTORIAL I LIKE IT, BANYAK SEKARANG YANG AKU TAU..TENGKYU LAST AGAIN
By commedo on May 16, 2007 | Reply
Mengenai plus-minus, saya OK dengan pendapat2 sebelumnya.
IMHO, framework itu sangat penting sebagai guidance bagi kita untuk konsisten dalam mengembangkan aplikasi dan life-cycle-nya khususnya yang namanya PRODUCT.
Saya pribadi merasakan kesulitan yang sama dalam pengembangan produk khususnya ketika harus dikembangkan lagi karena software itu ada masa hidupnya, minimal dari sisi tampilan. Lihat saja produk MS yang begitu “dinamis” (walaupun dari sisi interface saja).
Untuk jangka pendek atau keperluan projek yang nilainya tidak besar, penggunaan framework kompleks sangat memberatkan. Tapi tidak menggunakannya sama sekali jauh lebih buruk karena pada akhirnya akan kesulitan dalam memastikan kualitas delivery dan tracebility dan extensibility.
Minimal menggunakan “framework” sederhana (misal hanya memisahkan kode presentasi dan bisnis proses) sudah lebih baik.
By Derry Fauzi on Jul 28, 2007 | Reply
Trims, informasi yang menarik.
By Minggus on Sep 3, 2007 | Reply
Sori mas saya masih belu punya gambaran soal framework, terus terang gak pernah gunain apa yang namanya framework (saya develop pake oracle developer)..
saya lagi mau belajar yang namanya .net…jadi kalau ditanya soal framework cuman bisa ngerutin dahi…gak tau musti omong apa…terlalu oon soal framework..
mungkin ada beberapa pertanyaan yang bisa bantu saya sedikit tau soal framework
1. Apache, IIs termasuk framework kan….?…:d
2. Apa beda framework n Webserver……?
sori mas kalau terlalu lemot.
Regard’s
By BoiM on Sep 4, 2007 | Reply
aku newbie yang benar2 newbie.
ada pertanyan yang ngga bisa aku jawab hanya dengan googling,
kenapa kalau aku instal sebuah program. ada program yang memita kita untuk menginstal framework.
tolong mas, balas ke e-mail koe boy_irawan25@yahoo.com
By Kusyandi on Dec 21, 2007 | Reply
Saya belum pernah menggunakan frame work, tapi di NB 6 waktu bikin project ada pilihan penggunaan framework yang saya pikir itu seperti wizard saja. jadi saya belum tau harus diapakan framework itu. setidaknya lewat tulisan mas endy ini saya lebih tau sedikit soal framework, tapi belum tau pengaplikasiannya karena memang harus dicoba dulu.
Saya tunggu ulasan framework selanjutnya kalo bisa tutorialnya dari satu case tertentu saja dari yang pernah mas endy kerjakan.
By endy on Dec 21, 2007 | Reply
@Kusyandi :
Silahkan baca artikel saya yang terbaru tentang penggunaan Spring Framework untuk mengakses database dan membuat aplikasi web sederhana.
By endy on Dec 21, 2007 | Reply
@Minggus :
Apache dan IIS itu webserver, bukan framework.
Oracle ADF itu baru namanya framework
By InU on Nov 17, 2008 | Reply
Ada yang lebih bagus dari Framework??
yang lebih mahal Buanyak
Just stupid Person hehehehe
By mbahsomo on Apr 8, 2009 | Reply
Ikut nimbrung ah.
. sekarang kalo lagi butuh cepet ya Pake delphi yang lebih mudah.
Dari awal belajar java untuk koneksi ke database hanya menggunakan JDBC biasa tanpa tau apa tuh framework, baru – baru ini sering explorasi menggunakan berbagai framework. tapi akhirnya membuat program bukannya untuk programmer, saat user membutuhkan yang sulit di jangkau dengan framework tertentu akhirnya kita akan mengalami proses yang sulit, atau malah gabung sini gabung sana dengan framework yang lain. proses ini lah yang akan membuat program jadi tidak nyaman buat User.
Untuk pogram windows, dulu saya awalnya adalah programer VB trus karena kebutuhan malah back to Foxpro 2.6 pake server novel. trus beberapa tahun lalu malah Ganti pake delphi
By hadi on Apr 16, 2009 | Reply
saya mau membuat aplikasi ecommerce berbasis java. Aplikasi itu harus diimplementasikan design pattern yang tepat mas. Nah, selain saya niubi di java, saya juga belum familiar menggunakan design pattern. Ada saran ga mas endy langkah2 apa yang harus saya lakukan untuk membuat aplikasi tersebut??
Makasih sebelumnya..
By Maaz on Jun 8, 2009 | Reply
Hmmhh… Penjelasan yang saya butuhkan..
By sebelsamaframework on Jun 11, 2009 | Reply
aargh,kenapa di java musti banyak framework sih?? develop aplikasi aja butuh waktu,eh malah dipusingin sama masalah mau pake framework yg mana,,
mana orang java sukanya nyampur2in framework dalam satu aplikasi lagi. kan kasian kalo ada orang baru yg mo ngelanjutin, musti pelajarin dulu framework2nya,,
kalo di .net mah kita ga dipusingin sama yg namanya framework, smua-muanya dah ada di visual studio..
yaa itulah resikonya gratisan><
there isn’t something that money can’t buy:D
By doez on Jun 23, 2009 | Reply
ok thx infonya
By ucup on Jun 30, 2009 | Reply
diposting agustus 2006. wah, berarti saia sudah ketinggalan tren 3 tahun
By Eboy on Mar 11, 2010 | Reply
Hua mending tiga, saya malah dah ketinggalan empat tahun cup, hihi… tapi okelah, yang penting kejadian serupa ni kasus jangan pe-terulang lagi dah, amin.
salam senimandigital