Programovanie

JRuby on Rails: Sila Javy, jednoduchosť Ruby on Rails

Ruby, plne funkčný objektovo orientovaný dynamický (skriptovací) jazyk, ktorý má silnú podporu pre funkčné programovanie a metaprogramovanie, v poslednej dobe upriamil pozornosť na svoju flexibilitu a ľahký vývoj. JRuby, tlmočník založený na JVM pre Ruby, kombinuje jednoduchosť jazyka Ruby s vykonávaním vo výkonnom JVM, vrátane úplnej integrácie do a z knižníc Java.

Od mojich predošlých JavaWorld článku na túto tému („JRuby pre svet Java“), došlo k niektorým vzrušujúcim vývojom pre JRuby. Spoločnosť Sun Microsystems najala dvoch vedúcich vývojárov JRuby, Charlesa Nuttera a Thomasa E. Eneba, na znak podpory Ruby v JVM. Bola vydaná platforma Java Standard Edition 6 (Java SE 6) s novým štandardným rozhraním API na pripojenie tlmočníkov pre dynamické jazyky. Spracovávajú sa plány na podporu Java 7 VM na podporu dynamických jazykov priamo s novým „vyvolať dynamický“ bytecode a hot-swapping definícií tried za behu. Tím JRuby medzitým vydal verziu 0.9.2 so širšou podporou pre Ruby on Rails a ďalšie veľké vydanie JRuby, ktoré sa očakáva vo februári, bude obsahovať plnú podporu pre Ruby on Rails.

Ruby on Rails, ľahko použiteľný, ale výkonný webový rámec postavený na jazyku Ruby, si rýchlo získal popularitu pre nové webové aplikácie podporované databázou, najmä vo svete Web 2.0. Odošlem vás inde, kde nájdete podrobnosti o Ruby on Rails, nazývanej tiež Rails. Aj keď je projekt starý iba 3 roky, bolo o ňom napísaných veľa článkov a kníh a jeho dokumentácia je vynikajúca pre open source projekt (pozri webovú stránku Ruby on Rails). Rovnako vás odkazujem na môj predchádzajúci článok s úvodom do JRuby.

V tomto článku skúmam spojenie medzi Rails a Java. Porovnávam webové rámce Rails a Java, popisujem výhody fungovania Rails s JRuby a hodnotím niektoré lekcie, ktoré si môže vývojár Java - aj ten, kto Rails nepoužíva - z tohto inovatívneho rámca vziať.

Sila a jednoduchosť

Rails radikálne urýchľuje a zjednodušuje vývoj webových aplikácií, trpí však obrazom nezrelosti, najmä pokiaľ ide o špičkové podnikové sily.

Na druhej strane platforma Java so svojimi virtuálnymi strojmi, knižnicami a aplikačnými servermi získavala na rýchlosti, stabilite a funkčnosti až do bodu, keď sa všeobecne považuje za vedúcu platformu pre špičkové serverové aplikácie. Pokiaľ však zostane viazaná na jazyk Java, riskuje platforma Java zaostávanie, pretože novšie jazyky si získajú popularitu.

JRuby spája vzájomne sa doplňujúce silné stránky všetkých týchto technológií a sľubuje zvýšenú popularitu pre Ruby aj Rails, pričom platforme Java dáva novú úlohu pri spúšťaní iných jazykov ako Java.

Rails: Kam smerujú rámce Java

Vývojárovi v jazyku Java sa Rails javí ako prirodzené vyvrcholenie trendov vo vývoji webových webových rámcov Java: menej zbytočného kódu, viac abstrakcie a dynamiky a úplnejšia funkčnosť.

Dohovor o konfigurácii

Prvé verzie platformy Java Platform, Enterprise Edition (Java EE) vyžadovali rozsiahlu konfiguráciu a kód pre každú súčasť. Napríklad Enterprise JavaBeans mala pre každú fazuľu viac konfiguračných súborov zdrojového kódu a XML. Táto zložitosť zmenila EJB na úvodné slovo pre vývoj ťažkých váh a nakoniec viedla k obratu v EJB 3 o 180 stupňov, ktorý je zameraný na fazule POJO (obyčajné staré objekty Java) s minimálnou redundanciou a konfiguráciou. Aj napriek tomu náročné aplikácie Java EE stále vyžadujú, aby vývojári vyvinuli kód na vyjadrenie rovnakých obchodných objektov na viacerých úrovniach softvéru - grafické používateľské rozhranie, obchodná logika a vytrvalosť. Potom musia vývojári napriek redundancii a podobnosti medzi vrstvami lepiť vrstvy spolu s konfiguračnými súbormi. Naopak, novšie webové rámce Java Web Seam a Spring vystavujú obchodné objekty s oveľa menšou konfiguráciou a kódom.

Rámec Java sa tiež posúva k štandardizácii a integrácii stohu naprieč vrstvami webovej aplikácie. V prvých dňoch vývojári webových aplikácií Java ručne kódovali výstup HTML z servletov, vytvorili vlastné architektúry Model-View-Controller a pristupovali k svojim databázam pomocou protokolu SQL over Java Database Connectivity (JDBC). Neskôr zhromaždili komponenty na vykonávanie väčšiny bežných funkcií, ako sú knižnice značiek, Struts a Hibernate. Nedávno Spring integroval väčšinu funkcií do jedného ľahkého stohu zhora nadol.

Rails od začiatku stelesňoval tieto princípy jednoduchosti, princípy známe pre komunitu Rails ako „Neopakujte sa“ a „Konvencia nad konfiguráciou“. (Neredundancia a zmysluplné predvolené hodnoty patria medzi najstaršie princípy softvérového inžinierstva; je divu, že sme si na niečo ako Rails museli tak dlho čakať.) Rámec odhaduje spojenie medzi rôznymi úrovňami na základe priamych konvencií. Napríklad nie je potrebné, aby XML, anotácie a podobne informovali rámec, že ​​zákaznícka trieda je podporovaná zákazníkov stôl; Hádanie to zabaľuje vrstva ActiveRecord databázy Rails (pri zohľadnení pluralizácie a veľkých písmen). Rails ide tak ďaleko, že implicitne a dynamicky pridáva atribúty tak, aby odrážali stĺpce databázy: a priezvisko stĺpec automaticky prináša a priezvisko atribút do bytia.

V špeciálnych prípadoch, keď konvencie nevyhovujú vašim potrebám, môžete stále pridať konfiguráciu pomocou čistého kódu Ruby alebo ľahkého formátu YAML podobného Ruby, ktoré obidve vynechávajú nadbytočné zátvorky a zatváracie značky XML. Ak je to možné, mali by ste sa držať predvolených nastavení. Rails je „názorný softvér“, vďaka ktorému je to oveľa jednoduchšie, keď idete s prúdom.

Rails je rámec „vrátane batérií“ (fráza popularizovaná Pythonom): obsahuje všetko, čo potrebujete pre štandardnú databázovú webovú aplikáciu, od vrstvy prístupu k údajom, cez model, pohľad a radič. Umožní vám zamerať sa na to, čo je pre vašu aplikáciu špecifické, namiesto prekódovania bežných funkcií alebo hľadania knižníc otvoreného zdroja, ktoré sa dobre integrujú.

Dynamika a reflexia

Rámec Java sa tiež posúva k väčšiemu využívaniu reflexie a metaprogramovania. Spring napríklad používa reflexiu na pripojenie všetkých svojich častí spolu s injekciou závislostí, na rozdiel od statickejšieho prístupu štandardného zásobníka serverov Java EE. Hibernate, populárny objektovo-relačný mapovací rámec, robí svoje mapovanie pomocou dynamického metaprogramovania, aktualizáciou bytecode za behu, na rozdiel od skorých frameworkov pre prístup k dátam, ktoré vyžadovali ťažkopádne generovanie zdrojového kódu alebo bytecode v čase vývoja.

Vývojári spoločnosti Hibernate museli na vykonanie tejto funkcie použiť niektoré pokročilé techniky, ale v Ruby je metaprogramovanie takou prirodzenou súčasťou jazyka, že Rails za behu dynamicky generuje nielen mapovania, ale aj definície tried obchodnej vrstvy potrebné na prístup a zobraziť podkladovú databázu, čím sa minimalizuje potreba manuálneho kódovania alebo vytvárania nepružného generovaného kódu.

Podpora procesu rozvoja

Približne na konci 90. rokov boli programátori Java „testovaní“ rámcami JUnit, ale písanie testov pre aplikácie na strane servera bolo vždy ťažké. Jar teraz generuje testy spolu s webovou aplikáciou. To isté robí aj Rails, ktorý na podporu viacerých typov testov využíva dynamiku a metaprogramovanie: jednotkové testy, pri ktorých sa uplatňujú jednotlivé metódy modelových tried; funkčné testy, ktoré fungujú na úrovni individuálnej webovej požiadavky; a integračné testy, ktoré spúšťajú sériu webových požiadaviek v simulovanej relácii používateľa.

Populárne nástroje Ant a Maven štandardizovali automatizáciu zostáv v Jave. Rails tiež uľahčuje stavanie s Ruby's hrable zostaviť nástroj; pridáva inovatívny migračný systém, ktorý automatizuje upgrade (alebo vrátenie) databázových schém a údajov.

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