JRuby on Rails: Kekuatan Java, kesederhanaan Ruby on Rails

Ruby, bahasa dinamis berorientasi objek (scripting) berfitur lengkap, dengan dukungan kuat untuk pemrograman fungsional dan metaprogramming, baru-baru ini menarik perhatian karena fleksibilitas dan kemudahan pengembangannya. JRuby, juru bahasa berbasis JVM untuk Ruby, menggabungkan kemudahan bahasa Ruby dengan eksekusi di JVM yang kuat, termasuk integrasi penuh ke dan dari pustaka Java.

Sejak artikel saya sebelumnya tentang JavaWorld dengan topik ("JRuby untuk Dunia Java"), ada beberapa perkembangan menarik untuk JRuby. Sun Microsystems mempekerjakan dua pengembang utama JRuby, Charles Nutter dan Thomas E. Enebo, sebagai tanda dukungan untuk Ruby di JVM. Platform Java, Edisi Standar 6 (Java SE 6) dirilis dengan API standar baru untuk menghubungkan penerjemah untuk bahasa dinamis. Rencana sedang disiapkan untuk Java 7 VM untuk mendukung bahasa dinamis secara langsung dengan bytecode baru "panggil dinamis" dan hot-swapping definisi kelas saat runtime. Sementara itu, tim JRuby telah merilis versi 0.9.2 dengan dukungan yang lebih luas untuk Ruby on Rails, dan rilis besar JRuby berikutnya, diharapkan pada bulan Februari, akan menyertakan dukungan penuh untuk Ruby on Rails.

Ruby on Rails, kerangka kerja Web yang mudah digunakan tetapi kuat yang dibangun di atas bahasa Ruby, dengan cepat mendapatkan popularitas untuk aplikasi Web baru yang didukung database, terutama di dunia Web 2.0. Saya akan merujuk Anda ke tempat lain untuk detail Ruby on Rails, juga disebut Rails. Meskipun proyek ini baru berumur 3 tahun, banyak artikel dan buku telah ditulis tentangnya, dan dokumentasinya luar biasa untuk proyek sumber terbuka (lihat situs Web Ruby on Rails). Demikian juga, saya merujuk Anda ke artikel saya sebelumnya untuk pengenalan tentang JRuby.

Pada artikel ini, saya memeriksa persimpangan antara Rails dan Java. Saya membandingkan kerangka kerja Rails dan Java Web, menjelaskan manfaat menjalankan Rails dengan JRuby, dan meninjau beberapa pelajaran yang dapat dipelajari oleh pengembang Java - bahkan yang tidak menggunakan Rails - dari kerangka kerja inovatif ini.

Kekuatan plus kesederhanaan

Rails secara radikal mempercepat dan menyederhanakan pengembangan aplikasi Web, tetapi Rails mengalami citra ketidakdewasaan, terutama dalam kemampuan kekuatan perusahaan kelas atas.

Di sisi lain, platform Java, dengan mesin virtual, pustaka, dan server aplikasinya, telah memperoleh kecepatan, stabilitas, dan fungsionalitas, ke titik di mana ia secara umum dianggap sebagai platform terkemuka untuk aplikasi server kelas atas. Namun selama itu tetap terikat dengan bahasa Java, platform Java berisiko tertinggal karena bahasa yang lebih baru mendapatkan popularitas.

JRuby menyatukan kekuatan pelengkap dari semua teknologi ini, menjanjikan popularitas tambahan untuk Ruby dan Rails, sambil memberi platform Java peran baru dalam menjalankan bahasa non-Java.

Rails: Di mana kerangka kerja Java menuju

Bagi seorang pengembang Java, Rails tampak seperti puncak alami dari tren dalam evolusi kerangka kerja Java Web: lebih sedikit kode yang tidak perlu, lebih banyak abstraksi dan dinamisme, dan fungsionalitas out-of-the-box yang lebih lengkap.

Konvensi atas konfigurasi

Versi awal Java Platform, Enterprise Edition (Java EE) memerlukan konfigurasi dan kode ekstensif untuk setiap komponen. Enterprise JavaBeans, misalnya, memiliki beberapa kode sumber dan file konfigurasi XML untuk setiap kacang. Kompleksitas ini mengubah EJB menjadi buah bibir untuk pengembangan kelas berat, dan akhirnya menyebabkan perubahan 180 derajat di EJB 3, yang bertujuan untuk kacang POJO (objek Java biasa) dengan redundansi dan konfigurasi minimal. Meski begitu, aplikasi Java EE kelas berat masih membutuhkan pengembang untuk mengembangkan kode untuk mengekspresikan objek bisnis yang sama di berbagai tingkatan perangkat lunak - GUI, logika bisnis, dan persistensi. Kemudian, terlepas dari redundansi dan kesamaan antar lapisan, pengembang harus merekatkan lapisan tersebut bersama dengan file konfigurasi. Sebaliknya,Framework Web Java yang lebih baru, Seam dan Spring, menampilkan objek bisnis dengan konfigurasi dan kode yang jauh lebih sedikit.

Kerangka kerja Java juga telah bergerak menuju standardisasi dan integrasi tumpukan di seluruh tingkatan aplikasi Web. Di masa-masa awal, pengembang aplikasi Web Java membuat kode HTML dari servlet, membuat arsitektur Model-View-Controller mereka sendiri, dan mengakses database mereka dengan SQL melalui Java Database Connectivity (JDBC). Kemudian, mereka mengumpulkan komponen untuk menjalankan banyak fungsi umum, seperti pustaka tag, Struts dan Hibernate. Baru-baru ini, Spring mengintegrasikan banyak fungsi dalam satu tumpukan ringan dari atas ke bawah.

Sejak awal, Rails telah mewujudkan prinsip-prinsip kesederhanaan, prinsip-prinsip yang dikenal oleh komunitas Rails sebagai "Jangan Ulangi Diri Anda" dan "Konvensi atas Konfigurasi". (Non-redundansi dan default yang bermakna adalah salah satu prinsip tertua rekayasa perangkat lunak; sungguh mengherankan bahwa kita harus menunggu begitu lama untuk sesuatu seperti Rails.) Framework menebak hubungan antara berbagai tingkatan berdasarkan konvensi langsung. Misalnya, tidak perlu XML, penjelasan atau sejenisnya, untuk memberi tahu kerangka kerja bahwa kelas pelanggan didukung oleh customerstabel; Lapisan pembungkus database ActiveRecord Rails menebak ini (dengan mempertimbangkan pluralisasi dan kapitalisasi akun). Rails melangkah lebih jauh dengan menambahkan atribut secara implisit dan dinamis untuk mencerminkan kolom database: alast_namekolom secara otomatis membuat last_nameatribut menjadi ada.

Dalam kasus khusus, di mana konvensi tidak memenuhi kebutuhan Anda, Anda masih dapat menambahkan konfigurasi, menggunakan kode Ruby murni atau format YAML ringan mirip Ruby, yang keduanya menghilangkan tanda kurung berlebihan XML dan tag penutup. Tetapi Anda harus tetap menggunakan default jika memungkinkan. Rails adalah "perangkat lunak beropini", yang membuatnya jauh lebih mudah saat Anda mengikuti arus.

Rails adalah kerangka kerja "termasuk baterai" (frase yang dipopulerkan oleh Python): ini mencakup semua yang Anda butuhkan untuk aplikasi Web yang didukung database standar, dari lapisan akses data, melalui model, tampilan, dan pengontrol. Ini memungkinkan Anda fokus pada apa yang spesifik untuk aplikasi Anda, daripada mengode ulang fungsionalitas umum atau mencari pustaka sumber terbuka yang terintegrasi dengan baik.

Dinamisme dan refleksi

Kerangka kerja Java juga telah bergerak menuju penggunaan refleksi dan metaprogramming yang lebih besar. Spring, misalnya, menggunakan refleksi untuk menyambungkan semua bagiannya dengan injeksi ketergantungan, berbeda dengan pendekatan yang lebih statis dari tumpukan server Java EE standar. Hibernate, kerangka kerja pemetaan relasional objek yang populer, melakukan pemetaannya dengan metaprogramming dinamis, memperbarui bytecode pada waktu proses, berbeda dengan kerangka kerja akses data awal, yang memerlukan pembuatan kode sumber atau bytecode yang rumit pada waktu pengembangan.

Pengembang Hibernate harus menggunakan beberapa teknik lanjutan untuk mencapai fungsionalitas ini, tetapi di Ruby, metaprogramming adalah bagian alami dari bahasa yang Rails, pada waktu proses, secara dinamis menghasilkan tidak hanya pemetaan, tetapi juga definisi kelas lapisan bisnis yang diperlukan untuk mengakses dan menampilkan database yang mendasarinya, sehingga meminimalkan kebutuhan untuk pengkodean manual atau pembuatan kode yang dibuat tidak fleksibel.

Mendukung proses pembangunan

Sekitar akhir 1990-an, programmer Java mendapat "uji coba" dengan kerangka kerja JUnit, tetapi menulis pengujian untuk aplikasi sisi server selalu sulit. Spring sekarang menghasilkan tes bersama dengan aplikasi Web. Rails melakukan hal yang sama, memanfaatkan dinamisme dan metaprogramming untuk mendukung berbagai jenis pengujian: pengujian unit, yang melatih metode individual kelas model; tes fungsional, yang bekerja pada tingkat permintaan Web individu; dan tes integrasi, yang menjalankan serangkaian permintaan Web dalam sesi pengguna yang disimulasikan.

Alat Ant dan Maven yang populer menstandarkan otomatisasi build di Java. Rails, juga, membuat pembangunan menjadi mudah dengan alat pembuat rake Ruby ; itu menambahkan sistem migrasi inovatif, yang mengotomatiskan pemutakhiran (atau rollback) skema database dan data.