GROOVY & GRAILS

Možda će netko pomisliti, uf, još jedan framework. Međutim, Grails je zaista izuzetan framework, koji zapanjujuće ubrzava programiranje, minimalan broj linija koda uz maksimalno dobar rezultat i punu kontrolu najvažnijih dijelova programa.
Na stranicama http://grails.org docekuje nas parola The Search is over. Pronađen je Sveti Gral za programere koji maksimalno automatizira procese programiranja koliko je danas poznato. Naravno, ovo će procijeniti sami programeri.
Grails

Groovy kao programski jezik izrastao je na Javi sa tendencijom pojednostavljenosti. Tipičan je primjer izrade nekog koda npr. Javi za izradu XML datoteke koja zahtijeva dvostruko više koda nego u Groovy. Istovremeno, kod napisan u Javi može imati promijenjenu ekstenziju – test.groovy i kod radi, dakle, postoji potpuno poštivanje pravila Java sintakse.
Pored Java Virtual Machine, cijeli sistem se oslanja na razvijene frameworke Spring, Hibernate a struktura je vidljiva:

Grails-stack

Groovy&Grails inspiriran je razvojem dinamičkih jezika i frameworka kao Ruby on Rails, Django (Python framework).
Grails kao framework se temelji na podjeli MVC (Model-View-Controller, detaljnije o arhitekturi MVC, pogledajte ovdje ).
Model se u Grails terminologiji naziva Domain i radi na GORM (Grails' object relational mapping) arhitekturi. To znači da framework vodi računa o komunikaciji sa bazom i pretvara upite u potrebne query upite, možemo birati bazu na MySQL, PostgreSQL ili neku drugu bazu i ne moramo dirati aplikaciju već se samo promijeni izbor baze (točnije drivera) za komunikacijom sa bazom.

Dovoljno je sastaviti upite o zeljenim podacima iz baze ili pak proslijeđivanje podataka iz controllera, a Domain vodi racuna kako pretvoriti ovu sintaksu u query upite ovisno o izabranoj bazi podataka.
Domain vodi računa da li unos može ili ne smije biti null, jedinstveni unos, format e-maila, datuma, broj itd.

Mogućnost izrade osnovnih funkcionalnosti aplikacije može biti vrlo brza, prvo se definiraju polja tabele koja će biti kreirana u bazi. U dodatku je objašnjen konkretan primjer izrade dijela aplikacije na osnovu kreiranja polja u Domain klasi.
Npr. nešto ovako:

class Registracija {

    static constraints = {
        nazivutrke(unique:true)
        natjecatelj()
        uplata()
        datumIzrade()
    }

static belongsTo = [utrka:Utrka, natjecatelj:Natjecatelj]

Boolean uplata
Date datumIzrade
}

 

Nakon izrade Domain Klase, izrada cijelog sučelja, unosa, izmjene, listanja i brisanja podataka je stvorena nakon jedne jedine naredbe:
$ grails generate-all Registracija

 

Nakon toga je stvoren Controller i view sa svim potrebnim metodama, tj.   mogućnost upisa, izmjena prikaza i brisanja podataka (CRUD). kao i kompletan View. Ovdje ne govorimo o Scaffold izradi koja ipak ograničava samo korigiranje izgleda i feature izgleda, već su stvorene sve metode u klasi u Controlleru,  kompletan View, i svaki dio koda možemo onda prilagođavati potrebama aplikacije, naravno dodavati i oduzeti ono šta nam je potrebno. Naravno, izgled sučelja se moze definirati stvorenim template i CSS, opet elegantno riješenje kakvim se lako i efikasno kontrolira izgled sučelja.
Ako je rijec o zapisu koji je u relaciji sa zapisima iz druge tabele, Grails će voditi računa o istome, u ovom slučaju, Registracija pripada tabelama Utrka i Natjecatelj, te će podaci biti ažurirani u svim povezanim tabelama.
Svatko zna koliko je ovdje ručnog posla ušteđeno vodeći računa o zavisnotima i validaciji.

Međutim, ovo nije sve šta Grails može ponuditi.
Grails omogućuje korištenje mnoštvo biblioteka kroz plugine.
Treba li uopce navesti da je instalacija plugina krajnje jednostavna? Dovoljna je naredba:
$ grails install-plugin nameofplugin
Pozivanje plugina može biti u nekoliko redova. PLugina ima cijelo mnoštvo na službenim stranicama Grailsa, od exporta u PDF, xls formate, sigurnosnih dodataka, rich text editora, ajax biblioteka itd. Uz svaki plugin je dokumentacija o instalaciji i upotrebi.
Npr. nakon instalacije plugina  searchable u Domain upisujemo

class Aplikacija {
    static searchable = true
    // ….
}

 

Dakle, u 2 linije koda dobivamo rijesen Search u aplikaciji! Naravno, ovo je sirov ispis svih rezultata pretrage, isti se može filtrirati i podijeliti prema željenim kriterijima.
Link za Grails plugine: http://www.grails.org/plugin/home

Testovi
Automatski testovi su važan dio modernih frameworka, i Grails nudi široki spektar mogućnosti testiranja, od testiranja unosa u bazu podataka, do testiranja rada kontrolera. Nakon stvoranja klase Domain, Grails već stvara klasu koja treba sadržati testove.
Potrebno je nakon toga stvoriti određene inpute i Grails treba provjeriti da li je u skladu sa postavkama aplikacije.
Npr. ako imamo zapis koji ne može biti null, ili mora biti određene duljine znakova, stvorimo input u unit testu koji će pokušati upisati različite znakove od dozvoljenih, Grails to treba onemogućiti. Obrnuto, ako je upis u skladu sa očekivanim, Grails ga treba označiti kao validan upis.
Pored unit testova, tu su i integracijski testovi koji provjeravaju cjelovitost čitave aplikacije.
Konačno, moguće je pokrenuti i funkcionalne testove, doduše, za ovo je potrebno instalirati dodatne pluginove.
Dakle, testiranje omogućava kvalitetnu kontrolu cijelovitosti pojedinih klasa, nakon izmjene u kodu, ponovo možemo (i trebamo) pokrenuti ranije napisane testove za klase koje nisu izmjenjene, ili pak za klase koje su izmjenjene, ali već smo ranije definirali željeni rezultat.
Razvoj aplikacije može izmijeniti ranije stvoreni dio strukture, pogotovo ako smo u razvoju imali pauzu u radu, greške mogu biti teže uočljive. Automatski testovi nam trebaju olakšati život u kodiranju.

Sigurnost
Sigurnost je još jedan važan dio strukture Grailsa. Sustav ima filtere za tzv. SQL injection (unos malicioznih kodova putem SQL upita), xss filter (maliciozni upiti koji koriste JavaScript), pokušaj unosa HTML  tagova,  itd.
U startu, tekst koji je upisan npr. kroz tekstualni dio forme, a sadrži pokušaje ovakvih unosa, biti će doslovce upisani u bazu podataka kao i bilo koji drugi tekstualan upis.
Zapisi o podacima koje se prenose putem URI, moguće je zamaskirati, tj.umjesto id, možemo postaviti u URI zapis o trazenom elementu, npr. Prezime_Ime.
Drugi vidovi sigurnosti kao login autentikacija nisu dio frameworka, ali su dostupni preko instalacije plugina.
Naravno, programer mora voditi računa o tome da slijedi upute koje daju autori Grailsa, u protivnom, sam po sebi framework neće zaštiti aplikaciju ako je nespretno pisana, ili nisu poštovane upute o pisanju koda koji treba biti zaštićen.


Grails naredbe tipično se pokreću iz komandne linije, ali moguće ga je integrirati sa drugim alatima, npr. sa Eclipse, i tada iz Eclipse upravljamo cijelim Grails-om.

Ukupno gledano, Groovy&Grails je vrlo moćna kombinacija koja omogućuje brz i kvalitetan razvoj modernih web aplikacija. Direktno ili kroz instalaciju pluginova dostupan je ogroman broj mogućnosti koje možemo poželiti u jako kvalitetnoj aplikaciji.
Broj ljudi koji koriste Groovy&Grails raste iz dana u dan, veliki je broj Java programera koji su rado prigrlili ovu kombinaciju, također, razvoj samog frameworka je intenzivan, redovni su novi update-ovi, nove verzije koje pružaju još više mogućnosti od prethodnih.
Instalacija Groovy&Grails opisana je ovdje.

Literatura za preporučiti je slijedeća:

  • Vjerojatno najbolja knjiga za početak: Getting Started with Grails. Knjigu je moguće dobiti besplatno na download: http://www.infoq.com/minibooks/grails
    Štampana verzija knjiga košta 22 $ i to je jeftino za tako vrijednu knjigu.
    Kroz 140 stranica, knjiga pokazuje izradu jednostavne aplikacije i vodi čitatelja korak po korak kroz korištenje najosnovnijih i najvažnijih dijelova Grailsa, također i kroz naprednu upotrebu Grailsa.
    Tečnim i duhovitim pisanjem, ovaj rad defintivno može zagrijati čitatelja jer se pokazuje snaga i brzina Grailsa.

  • The Definitive Guide To Grails , Graeme Rocher i Jeff Browna. Ovaj duo su vodeći programeri Grailsa i vjerojatno nitko ne poznaje bolje rad sa Grailsima od njegovih autora.
    http://www.amazon.com/Definitive-Guide-Grails-Graeme-Rocher/dp/1590597583
    (Google books ima odličan pregled ove sjajne knjige)

    Autori knjige citiraju Leonarda Da Vinci: Simplicity is the ultimate sophistication. - Jednostavnost je krajnja sofisticiranost
    Ta logika vjerno slijedi koritenje Grailsa

  • Grails help dokumentacija - http://grails.org/doc/latest/
    Isti help je instaliran i lokalno u ~/grails/doc/index.html

  • On-line časopis o naprednom korištenju Groovy - http://www.groovymag.com
    Uz pretplatu se dobiva mjesečni primjerak časopisa.