Trecerea frontierei este rubinul secret pe șine

Acest conținut face parte din seria: Crossing Borders

Aveți grijă de articole noi din această serie.

Fraudă și scepticism

Dezbaterile despre Rails în comunitatea Java se desfășoară intens și nu există încă semne de decădere a acestora. Suporterii lui Rails se bucură de performanță incredibilă, de câteva revendicări, de la 10 la 1, comparativ cu dezvoltarea Java. Ca orice dezvoltator de Java, reacția dvs. naturală este să nu aveți încredere în performanțele teribile, după cum ați auzit-o înainte și ați fost dezamăgiți. Java avocații insistă că Ruby on Rails este o jucărie care nu scală, produce cod rău și nu funcționează în afara unor aplicații simple. Dar, din moment ce lauda lui Rails continua (adesea din surse de încredere), o abordare mai prudenta este posibil de a intelege ceea ce face Rails bine si a aduce aceste idei inapoi la platforma Java. În acest articol, voi acoperi principalele funcționalități (zest ascuns) care alcătuiesc esența performanțelor ridicate ale Rails.

Despre această serie

Această serie de articole prezintă concepte și tehnologii de programare care sunt radical diferite de dezvoltarea Java, dar sunt direct potrivite pentru aceasta. În unele cazuri, trebuie să integrați tehnologia pentru a profita de beneficiile sale. În alte cazuri, puteți aplica conceptele în mod direct. Instrumentul specific nu este la fel de important ca ideea că alte limbi și sisteme pot afecta dezvoltatorii, sistemele integrate și chiar abordările fundamentale în comunitatea Java.

Rails filosofie

  • Integrare ușoară. Rails utilizează cu strălucire cele mai bune proprietăți ale limbajului de programare Ruby. Extinde Ruby astfel încât uneori este dificil să se spună unde se termină Ruby, iar Rails începe. De asemenea, se remarcă integrarea excelentă a Active Record (mecanismul de persistență a Rails) și a mediului Model-View-Controller (model-view-controller - MVC). De exemplu, puteți scrie trei rânduri de cod, creați un tabel și apoi generați imediat o interfață de utilizator pentru acest model.
  • Acord de configurare. Pentru a menține o flexibilitate impecabilă, sistemele Java suportă fișiere de configurare complexe. Rails refuză această strategie. Acesta permite structura obișnuită a directoarelor de proiecte și convențiilor simple, convenționale de numire pentru metode, clase, tabele și coloane, ceea ce înseamnă în multe privințe configurația obișnuită în aplicațiile Java. Ca rezultat, aplicațiile Rails necesită doar o parte din codul de configurare utilizat în Java, adesea diminuându-și dimensiunea de 10 sau de mai multe ori.
  • Repetabilitate redusă. Nu repetați (nu repetați-vă sau uscați) - acesta este sloganul tradițional din comunitatea Rails. Dezvoltatorii mediului Rails tind să absoarbă sarcinile repetitive folosind metode care adesea arata ca extensii Ruby. Așa cum ați văzut în al treilea articol din această serie, strategia de metaprogramare în Rails complică activitatea fiecărei linii de cod.
  • Reacție inversă imediată. Când lucrați în Rails, majoritatea lucrurilor pe care le faceți pot provoca o reacție imediată. Ai scrie o linie de cod și salvează, iar modificarea dvs. devine activă atunci când încarcă pagina următoare Web. Migrațiile pot deveni vizibile imediat după actualizarea bazei de date.
Fundația practică

Motivele din spatele Ruby on Rails se bazează strict pe experiența practică. Mediul Rails a crescut de la utilizarea practică în dezvoltarea aplicației populare de management de proiect Basecamp (a se vedea resursele).

Concentrarea pe domeniul de aplicare

Argumentul împotriva vorbirii despre performanța teribilă se bazează de obicei pe următoarele: dacă aș avea un ciocan bun, cu greu aș fi găsit un alt ciocan care ar avea o productivitate de două ori mai mare; să lăsăm discuția despre creșterea productivității de 5-10 ori, deoarece ciocanele sunt perfecționate de mai bine de o mie de ani. Dar oamenii care compară Ruby on Rails cu diferite medii Java integrate cu scop general nu vor fi de acord cu acest lucru. Puteți îmbunătăți performanța de rezolvare a unor probleme de 10 ori, schimbând radical natura instrumentului. Profesioniștii folosesc acum ciocane pneumatice, care ciocnesc o duzină de cuie, în timp ce un ciocan obișnuit înfundă numai unul. Ca un ciocan pneumatic, Rails este un instrument specializat. Acesta este un mediu scris cu un accent precis pe o arie de aplicație: noi aplicații Web care utilizează baze de date.

Aș ghici că aproximativ jumătate din aplicațiile Web create în prezent utilizează baze de date. Cu siguranță, Rails este un produs specializat, dar specializarea este mare și importantă. Specializarea în acest domeniu oferă Rails beneficii uriașe, explicând efectul mare pe care îl poate oferi. Concentrându-se pe proiectele din domeniu, dezvoltatorii Rails pot folosi trucuri scurte pe care alte sisteme integrate nu le pot oferi. Această specializare sacrifică adesea flexibilitatea de dragul simplității.

Noile aplicații care utilizează baze de date oferă o abordare de împachetare în locul unei abordări de cartografiere. După cum ați văzut în primul articol din această serie, program de șine presupun acorduri în modelul de date. Aplicațiile Rails au nevoie de un fragment din codul de model utilizat în aplicațiile Java. Dacă creați schema specială pentru aplicațiile Rails, această filozofie funcționează bine. Dacă doriți să adaptați o schemă existentă în Rails, lucrurile nu merg așa de bine.

Aplicațiile Web permit un set similar de optimizări. Știind că o aplicație se bazează pe tehnologii Web, cunoașteți structura generală a aplicației și componentele principale pe care probabil că va avea nevoie. Următoarele funcții sunt îmbunătățite în Rails, deoarece Rails este specializată în aplicații Web:

  • Model-view-controller. Mediul Rails MVC, numit Action Pack, este configurat pentru accesul la Web și implementează o strategie cunoscută numită Model 2 (a se vedea Resurse). Versiunea Rails are o integrare optimizată între controler și vizualizare, care minimizează configurația și face automat variabilele instanței controlerului disponibile pentru prezentare.
  • Structura cataloagelor proiectului. Toate aplicațiile Rails au aceeași structură de proiect, cu directoare pentru gestionarea codului aplicației, configurarea bazei de date, fișierele statice publice și scripturile pentru gestionarea serverelor Web și testare web funcțională.
  • Arhitectura. Mediul Rails simplifică arhitectura oferind scripturi gata făcute, care generează componente de aplicație care aderă la soluții arhitecturale comune, cum ar fi cache-ul de pagini și fragmente, un design pe două niveluri; mediu pentru testare, dezvoltare și producție.
  • Toolkit. Rails-tools sunt specializate pentru Web. Suportul pentru logare, punctele de control, profilele și sistemele de testare sunt adaptate pentru aplicații Web și sunt permise pentru lucrări pe două nivele.

Dar ciocanele pneumatice nu vor înlocui niciodată un ciocan convențional, așa că am fi acționat nerezonabil, așteptând o înlocuire completă. Ciocanul poate face întotdeauna lucruri pe care ciocanul pneumatic nu le poate face. Rails nu va fi niciodată un instrument pentru integrarea corporativă, cartografiere obiect-relațională sau servicii Web universale. Cel mai bun lucru pe care îl puteți aștepta de la Rails este că este un instrument specializat care funcționează bine în nișă.

Experiența dezvoltatorilor

Adânc în detaliile lui Rails, începeți să înțelegeți cât de diferit poate fi experiența dezvoltatorului Rails. O buclă de feedback rapidă, console interactive la fiecare pas, acorduri de configurare - toate acestea îmbunătățesc experiența dezvoltatorului în direcții adesea inaccesibile în sistemele Java.

Ciclul de reacție inversă

Puteți presupune că o buclă de feedback rapidă care ajută la dezvoltarea va fi dăunătoare pentru aplicațiile gata făcute. În cele din urmă, repornirea frecventă a claselor care permit un ciclu de reacție rapidă inversă ar trebui să încetinească aplicarea finală la un nivel inacceptabil. Dar Rails rezolvă această problemă oferindu-vă diferite medii pentru desfășurare și dezvoltare. Mediul de dezvoltare efectuează repornirea frecventă a claselor în detrimentul performanței aplicațiilor, iar mediul de lucru reduce restabilirea la minimul necesar, asigurând performanțe rapide ale utilizatorilor finali, în detrimentul unui ciclu de feedback rapid pentru dezvoltator.

interactivitate

Interactivitatea Ruby contribuie, de asemenea, la Rails. Probabil credeți că depanarea unei aplicații Rails fără un mediu IDE complet este dificilă. Nu e așa. Rails oferă două funcții care simplifică depanarea. Unul dintre ele este programul de lucru cu puncte de control. care vă permite să adăugați un cuvânt cheie breakpoint la codul sursă.

Dacă executați UNIX® sau Mac OS X, porniți serverul într-un proces separat.

Tastați sau lipiți următorul cod în aplicație / controlere / fișier samples_controller.rb:

Testați codul descărcând localhost: 3000 / samples and localhost: 3000 / samples / show.

Când Rails ajunge la punctul de control, aplicația se va opri. Fereastra programului cu punctele de control deschide interpretul Ruby cu mediul înconjurător, a cărui stare corespunde stării actuale a controlerului. Apoi puteți rula comenzi Ruby pentru a solicita informații despre starea sesiunii dvs., pentru a executa metode și pentru a interoga valorile variabilelor:

Acest mic program nu vă oferă un debugger plin, dar nu au unele caracteristici care nu sunt în Java-depanatoare, inclusiv accesul deplin la interpret, și capacitatea de a efectua metodele de aplicare dumneavoastră.

Acord de configurare

Convenția asupra configurației, de asemenea, duce la unele momente neașteptate pentru noi șine dezvoltatori, deoarece controller și codul de model este destul de laconică. Ați văzut în primul articol. că, bazându-se pe mediul Rails, puteți obține un comportament avansat pentru clase foarte simple, înființarea șine, convenții de nume și care să permită șine ghici la punctele de conectare ale aplicației în loc să direcționeze configurația lor. De exemplu, un obiect Persoană cu multe atribute și o relație unul cu mai multe cu un departament ar putea arăta astfel:

Nici o configurație nu este necesar ca Rails face presupunerea că numele tabelei (persoane), identificatorul de obiect din titlu și o cheie primară (id), masa legate de artist (departamente), numele cheii externe (department_id) și numele clasei exterioare (department.rb), pe bază de privind convențiile de numire. Codul rămâne simplu, expresiv și foarte simplu în aparență, indiferent de ceea ce faci cu ea - a scrie, citi sau serviciu. Ideile sunt imediat de înțeles.

Ce pot învăța dezvoltatorii Java?

Nu vă sugerăm să creați cele mai bune Rails în limba Java. În schimb, dezvoltatorii Java trebuie să învețe câteva lecții din mediul Rails și să se străduiască să creeze sau să îmbunătățească mediile Java pentru următoarele sarcini:

  • Permiteți implementarea la cald, care scurtează buclă de feedback sau acceptă medii care permit desfășurarea la cald. Această prioritate ar trebui să fie mult mai mare pe partea Java decât este acum.
  • Utilizați mai puțin XML și mai multe acorduri. Convențiile nu exclud configurații, deoarece puteți utiliza convenții pentru a specifica valorile și configurațiile implicite pentru a înlocui acordul. Folosind această abordare, așa cum face Rails, obțineți cele mai bune rezultate: un cod concis cu mai puțină repetare fără pierderi de flexibilitate.
  • De lucru pentru a încorpora un număr mai mare de limbaje de scripting, inclusiv BeanShell (a se vedea. „Resurse“), pentru studiul Java-clase în timpul procesului de depanare.
  • Utilizați instrumentele potrivite pentru a face lucrarea. Nu este necesar să te referi la Hibernate doar pentru persistență sau pentru Struts doar pentru că ai nevoie de o aplicație Web.

Includând cele mai bune caracteristici ale altor limbi de programare, este posibil să nu reușiți să reproduceți Rails, dar să îmbunătățiți cu siguranță calificarea Java.

Descărcați resurse

Subiecte conexe

Articole similare