Ruby pe șine

Probabil ați auzit de multe ori despre cât de mult Ruby on Rails îmbunătățește productivitatea și calitatea muncii programatorului web. Sincer, pentru a înțelege pe deplin de ce toată această hype trebuie citită "Dezvoltarea web agilă cu rails". Cu toate acestea, într-o mică serie de articole, tot încerc să dau o idee generală despre ce sunt "șinele" și la ce sunt atât de bune.







Foarte scurt istoric al Ruby și RoR

Aveam nevoie de un limbaj "scripting" mai puternic decât Perl și mai orientat spre obiect decât Python. Așa că am decis să creez propriul meu limbaj de programare.

Din interviul pentru O'Reilly LinuxDevCenter


Fotografii de pe blogul său oficial

Dar toate acestea au fost fapte goale și plictisitoare.

Pe scurt despre hype și avantaje


Dacă căutați informații despre RoR, atunci veți vedea declarații puternice că în acest cadru puteți dezvolta aplicații web de 10 ori mai rapid decât Java (cu cadrele sale, desigur) etc. Deci, nu credeți toate astea. În primul rând, încercați-l singur, iar apoi nu mai trebuie să spuneți nimic. Știți deja că acest lucru este adevărat.

Deci, ce este atât de bun despre aceste șine? Cel mai important lucru, în opinia mea, este că cadrul nu se naște în condiții artificiale, ci este "rupt" de produsul software de lucru și profitabil. Astfel, chiar înainte de a menționa primul, el a trecut de run-in în condiții reale, cu utilizatori și riscuri reale. Dacă te uiți la aspectele arhitecturale și tehnice, atunci

- În primul rând, arhitectura MVC facilitează separarea nivelurilor de date, vizualizări și logica de afaceri unul de celălalt;
- În al doilea rând, RoR respectă cu strictețe principiul DRY (Nu repetați - nu-l repetați), ceea ce vă permite să scrieți aplicații flexibile și ușor de urmărit;
- În al treilea rând, Rails vă permite să vă concentrați asupra sarcinii, mai degrabă decât asupra invenției roții. Dacă trebuie să verificați dacă câmpul cu numele este completat, scrieți validates_presence_of: nume și mergeți la punerea în aplicare a unor lucruri mai importante (sau mergeți să beți ceai);
- și în sfârșit, acesta este un cadru de la practicarea programatorilor web la practicarea programatorilor web, și nu a unui făt al conștiinței bolnave - obsedat de teorie - "dezvoltatori", activități de marketing sau cursuri de informatică.

Nivel de date (Model) - ActiveRecord


ActiveRecord este o implementare ORM care se livrează cu Rails. Dar ce este ORM? ORM (Object-Relational Mapping) este o tehnică pentru reprezentarea unei baze de date folosind obiecte. Ie clasa reprezintă tabelul, obiectul șirului și câmpurile acestuia, respectiv, ale coloanei. pentru că majoritatea cititorilor sunt familiarizați cu sintaxa "C-like", voi da un exemplu de Java.

Luați câteva cărți:
id int (10)






nume varchar (100)

Acest tabel poate fi reprezentat ca clasă:

clasă publică Carte public int id;
numele public String;


Ie Cartea mindinjava = carte nouă (1); ne va întoarce un rând în tabelul cărților cu id = 1.

ActiveRecord ne oferă o implementare foarte bogată a ORM, care construiește o ierarhie de clasă, bazată pe structura tabelului. În plus, aici (așa cum, într-adevăr, peste tot în RoR), se sprijină principiul "acordului în loc de configurații". Dar textul este text, iar codul va spune totul pentru sine. Dacă luăm tabelul de mai sus, atunci trebuie să rulați scriptul pentru generarea modelului:

rubin script / genera cartea model


Și voila! În directorul / app / models / există un fișier book.rb, pe care vom vedea despre următorul cod:

clasa de carte capăt


Deci, ce sa întâmplat? Avem un model gata pentru masa de cărți. Atunci când inițializat, Rails implică faptul că numele tabelului este numele clasei în plural, unde cuvintele sunt separate printr-un inferior subliniere. Ie Tabelul de comenzi corespunde ordinului de clasă, line_items - LineItem, persoane - Persoană etc. Deci, putem folosi acum:

defensivedesign = Cartea .new
defensivedesign. name = "Design Defensiv pentru Web"
defensivedesign. salva


După cum puteți vedea, în mod implicit, sunt implementate atributele clasei care corespund coloanelor din tabel și metodele CRUD (Create, Retreive, Update, Delete). Nu voi descrie aici aceste metode, pentru a nu transforma acest articol într-un fel de manual. Ele sunt multe și sunt foarte convenabile.

Deci, cu ajutorul unor "magie" pentru noi sa făcut o mare cantitate de muncă de rutină. Dar, mulți ar putea crede că dincolo de această magie nu pot ieși. Nu este așa, deoarece toate "înțelegerile" pot fi ignorate cu ușurință. De exemplu, dacă aveți deja o bază de date gata făcută pe care nu o puteți schimba deloc și o masă pentru cărți din aceasta se numește knigi, atunci trebuie doar să o indicați:

clasa de carte set_table_name "knigi"
capăt


Același lucru cu alte lucruri, cum ar fi, de exemplu, cheile primare. În mod implicit, RoR înseamnă că câmpul cu cheia primară se numește id (care, apropo, este foarte logic), totuși îl puteți rezolva scriind set_primary_key "kitob_cifra".

Unul dintre puținele locații în care trebuie să configurați acest fișier este /config/database.yml, în care specificați tipul și numele bazei de date. Merită menționat faptul că se recomandă utilizarea a trei baze de date identice pentru trei state ale sistemului: producție, dezvoltare și testare. După cum puteți vedea din titluri, producția este baza pentru versiunile stabile ale sistemului, dezvoltarea este pentru dezvoltare, iar testul este destinat testelor automate.

Exemplu de fișier database.yml:

de dezvoltare:
adaptor. MySQL
bază de date. books_development
nume de utilizator. rădăcină
parola. parolă
gazdă. localhost

încercare:
adaptor. MySQL
bază de date. books_test
parola. parolă
gazdă. localhost

producție:
adaptor. MySQL
bază de date. books_production
parola. parolă
gazdă. localhost


Până în prezent, Ruby on Rails suportă baze de date precum MySQL, DB2, PostgreSQL, Oracle, SQLite și MS SQL Server.

Acest lucru nu este tot ceea ce se referă la ActiveRecord și nu am spus despre relația dintre mese, tranzacții, agregări, callbacks și multe altele. Acest lucru pur și simplu nu face parte din formatul acestui articol. Voi constata că practic totul din RoR este implementat cu încântare pur și simplu. Trebuie să prezentați tabelul ca arbore obiect, sortat după câmpul de nume? Nu este nimic mai ușor!

Categorie de clasă acts_as_tree. comanda => "nume"
capăt


Deci, am văzut că nivelul de date din RoR este implementat într-un instrument simplu și, în același timp, foarte puternic - ActiveRecord, care prelucrează majoritatea operațiilor de rutină și vă permite să vă concentrați asupra sarcinii în sine. Data viitoare voi vorbi despre nivelul logicii de afaceri "pe șine", adică despre controlori.







Articole similare

Trimiteți-le prietenilor: