Programiranje

JRuby on Rails: Moč Jave, preprostost Ruby on Rails

Ruby, objektno usmerjen dinamični (skriptni) jezik z močno podporo za funkcionalno programiranje in metaprogramiranje, je v zadnjem času opozoril na svojo prilagodljivost in enostavnost razvoja. JRuby, tolmač za Ruby, ki temelji na JVM, združuje enostavnost jezika Ruby z izvajanjem v zmogljivem JVM, vključno s popolno integracijo v knjižnice Java in iz njih.

Od moje prejšnje JavaWorld V članku na temo ("JRuby za svet Java") je bilo za JRuby nekaj zanimivih dogodkov. Sun Microsystems je v znak podpore Rubyju v JVM najel vodilna razvijalca JRubyja, Charlesa Nutterja in Thomasa E. Eneba. Izšla je platforma Java, standardna izdaja 6 (Java SE 6) z novim standardnim API-jem za priključitev tolmačev za dinamične jezike. Načrtuje se, da bo VM Java 7 neposredno podpiral dinamične jezike z novo bajtno kodo "prikliči dinamično" in vročo zamenjavo definicij razredov med izvajanjem. Medtem je ekipa JRuby izdala različico 0.9.2 s širšo podporo za Ruby on Rails, naslednja velika izdaja JRubyja, ki jo pričakujemo februarja, pa bo vključevala tudi polno podporo za Ruby on Rails.

Ruby on Rails, enostaven za uporabo, a zmogljiv spletni okvir, zgrajen na jeziku Ruby, je hitro pridobil priljubljenost za nove spletne aplikacije, ki jih podpira baza podatkov, zlasti v svetu Web 2.0. Za podrobnosti o Ruby on Rails, imenovanem tudi Rails, vas bom napotil drugam. Čeprav je projekt star samo 3 leta, je o njem napisanih veliko člankov in knjig, njegova dokumentacija pa je izjemna za odprtokodni projekt (glej spletno mesto Ruby on Rails). Prav tako vas napotim na svoj prejšnji članek za uvod v JRuby.

V tem članku preučujem križišče med Rails in Javo. Primerjam okvire Rails in Java Web, opisujem prednosti izvajanja Rails z JRuby in pregledam nekaj lekcij, ki se jih lahko razvijalec Java - tudi tisti, ki ne uporablja Rails - nauči iz tega inovativnega okvira.

Moč plus preprostost

Rails radikalno pospešuje in poenostavlja razvoj spletnih aplikacij, vendar trpi zaradi podobe nezrelosti, zlasti pri zmogljivostih zmogljivejših podjetij.

Po drugi strani pa je platforma Java s svojimi navideznimi stroji, knjižnicami in strežniki aplikacij pridobivala na hitrosti, stabilnosti in funkcionalnosti do te mere, da na splošno velja za vodilno platformo za vrhunske strežniške aplikacije. Kljub temu, da ostaja vezana na jezik Java, Java platforma tvega zaostanek, saj novejši jeziki pridobivajo priljubljenost.

JRuby povezuje komplementarne prednosti vseh teh tehnologij, kar obljublja dodano priljubljenost tako za Ruby kot za Rails, hkrati pa daje platformi Java novo vlogo pri izvajanju jezikov, ki niso Java.

Rails: kamor se usmerjajo ogrodja Java

Razvijalcu Java se zdi, da je Rails naravni vrhunec trendov v razvoju spletnih okvirov Java: manj nepotrebne kode, več abstrakcije in dinamike ter popolnejša funkcionalnost, ki ni na voljo.

Konvencija glede konfiguracije

Zgodnje različice Java Platform, Enterprise Edition (Java EE) so zahtevale obsežno konfiguracijo in kodo za vsako komponento. Enterprise JavaBeans je imel na primer več konfiguracijskih datotek z izvorno kodo in XML za vsak grah. Ta zapletenost je EJB spremenila v geslo za razvoj težke kategorije in sčasoma privedla do 180-stopinjskega obrata v EJB 3, ki je namenjen fižolom POJO (navadni stari objekti Java) z minimalno redundanco in konfiguracijo. Kljub temu težke aplikacije Java EE od razvijalcev še vedno zahtevajo, da razvijejo kodo za izražanje istih poslovnih predmetov na več nivojih programske opreme - GUI, poslovna logika in obstojnost. Nato morajo razvijalci kljub odvečnosti in podobnosti med sloji sloje zlepiti skupaj s konfiguracijskimi datotekami. Nasprotno pa novejša spletna ogrodja Java Seam in Spring izpostavljata poslovne predmete z veliko manj konfiguracije in kode.

Okvirji Java se prav tako premikajo k standardizaciji in integraciji sklada na različnih ravneh spletne aplikacije. V najzgodnejših dneh so razvijalci spletnih aplikacij Java ročno kodirali izhod HTML iz strežnikov, ustvarili lastne arhitekture Model-View-Controller in dostopali do svojih zbirk podatkov z SQL prek Java Database Connectivity (JDBC). Kasneje so zbrali komponente za izvajanje večine običajnih funkcij, kot so knjižnice oznak, Struts in Hibernate. V zadnjem času je Spring integriral večino funkcionalnosti v en sam lahek niz od zgoraj navzdol.

Rails že od samega začetka vključuje ta načela enostavnosti, načela, ki jih skupnost Rails pozna kot "Ne ponavljajte se" in "Konvencija nad konfiguracijo". (Ne-odvečnost in smiselne privzete vrednosti so med najstarejšimi načeli programskega inženiringa; čudno je, da smo morali tako dolgo čakati na kaj takega, kot je Rails.) Okvir ugiba povezavo med različnimi nivoji na podlagi neposrednih konvencij. Na primer, ni potrebe po XML, pripisih in podobnem, da bi ogrodju povedali, da je razred kupcev podprt z stranke miza; Railsova plast ActiveRecord za zavijanje baze podatkov to ugiba (ob upoštevanju pluralizacije in uporabe velikih začetnic). Rails gre tako daleč, da implicitno in dinamično dodaja atribute, ki odražajo stolpce baze podatkov: a priimek stolpec samodejno pripelje a priimek atribut v biti.

V posebnih primerih, ko konvencije ne ustrezajo vašim potrebam, lahko še vedno dodate konfiguracijo z uporabo čiste Rubyjeve kode ali lahkega Ruby-jevega formata YAML, pri čemer oba izpuščata odvečne oklepaje in zaključne oznake XML. Vendar se morate držati privzetih vrednosti, kjer je to mogoče. Rails je "samozavestna programska oprema", ki olajša delo, ko gremo po toku.

Rails je ogrodje "vključene so baterije" (stavek, ki ga je populariziral Python): vključuje vse, kar potrebujete za standardno spletno aplikacijo, podprto z bazo podatkov, od ravni dostopa do podatkov, modela, pogleda in krmilnika. Omogoča vam, da se osredotočite na tisto, kar je značilno za vašo aplikacijo, namesto da kodirate običajne funkcije ali iščete odprtokodne knjižnice, ki se dobro povezujejo.

Dinamičnost in refleksija

Tudi Java-ovi okviri se premikajo k večji uporabi refleksije in metaprogramiranja. Spring, na primer, uporablja odsev, da priključi vse svoje dele skupaj z vbrizganjem odvisnosti, v nasprotju s bolj statičnim pristopom standardnega strežnika Java EE. Hibernate, priljubljeni objektno-relacijski okvir za preslikavo, svoje preslikave opravi z dinamičnim metaprogramiranjem in posodablja bajtno kodo med izvajanjem, v nasprotju z okvirji za zgodnji dostop do podatkov, ki so zahtevali okorno generiranje izvorne kode ali bajtkode v času razvoja.

Razvijalci Hibernate so morali za izvajanje te funkcije uporabiti nekatere napredne tehnike, toda v Rubyju je metaprogramiranje tako naraven del jezika, da Rails med izvajanjem dinamično generira ne samo preslikave, temveč tudi definicije razredov poslovne ravni, ki so potrebne za dostop in prikaz osnovne baze podatkov, s čimer se zmanjša potreba po ročnem kodiranju ali ustvarjanju neprilagodljive generirane kode.

Podpiranje razvojnega procesa

Konec devetdesetih let so se programerji Java "testirali" z ogrodji JUnit, toda pisanje testov za strežniške programe je bilo vedno težko. Spring zdaj generira teste skupaj s spletno aplikacijo. Rails počne enako, pri čemer izkorišča dinamičnost in metaprogramiranje za podporo več vrst testov: enotni testi, ki izvajajo posamezne metode razredov modelov; funkcionalni testi, ki delujejo na ravni posamezne spletne zahteve; in integracijski testi, ki izvajajo vrsto spletnih zahtev v simulirani uporabniški seji.

Priljubljena orodja Ant in Maven sta standardizirala avtomatizacijo zgradb v Javi. Rails tudi olajša gradnjo z Ruby's grablje orodje za gradnjo; dodaja inovativen migracijski sistem, ki avtomatizira nadgradnjo (ali vračanje) shem baz podatkov in podatkov.

$config[zx-auto] not found$config[zx-overlay] not found