Grailsujemy z bazą, czyli tworzymy linki cz.1

Grails implementuje wzorzec MVC, choć do tej pory o owym ‘modelu’ to niewiele napisałem. Pora to zmienić, tym bardziej, że bez modelu to nasza aplikacja nie różni się zbytnio od stronki opartej na tabelkach tak mniej więcej sprzed 10 lat.

W poprzednim wpisie wspomniałem, że tworzenie aplikacji w Grails jest oparte na mechanizmie ‘scaffoldingu’. Kolejne kroki polegają na:
– zbudowaniu klasy domenowej (domain class, tłumaczenie moje)
– napisanie do niej testów
– wygenerowanie dla tejże klasy kontrolera

Każdy obeznany ze wzorcem MVC w tym momencie zda sobie sprawę, iż nie jest to byle co. Często samo utworzenie modelu jest żmudną robotą, a do tego jeszcze testy i kontroler – wpis będzie długi z całą pewnością (dla niezorientowanych: piszę kolejne posty jednocześnie czytając i kodując zatem nie wiem co ostatecznie wyniknie na samym końcu :). Na pierwsze zapoznanie się z całym procesem wybrałem implementację strony z linkami. Nie jest ona specjalnie wymagająca ze strony widoku, kontroler też nie za bardzo, zaś model powinien okazać się dość prosty – w końcu cóż skomplikowanego może być w tabelce z linkami?

Wpierw należy stworzyć domain class, co da się łatwo osiągnąć klikając prawym przyciskiem na projekcie i wybierając New->Grails Domain Class. Nadajemy plikowi nazwę Linki i po chwili możemy cieszyć się nową klasą, a także stworzonym automatycznie plikiem do testów integracyjnych (integration tests). O samych testach napiszę w kolejnych wpisach (choć w myśl idei Grails wpierw powinniśmy napisać testy, a potem dopiero logikę), teraz przyjrzyjmy się naszemu modelowi.

class Linki {
String adress;
String description;
Date addDate;
Integer category_id;

static constraints = {
adress(blank:false, maxSize: 256, nullable: false)
addDate()
description(blank:false, maxSize: 1024, nullable:false)
category_id(blank:false, nullable:false)
}

}

Zasadniczo nie wiem czy jest sens cokolwiek wyjaśniać. Nasz model to po prostu reprezentacja konkretnych rekordów w tabeli bazy danych. Tabela ta dopiero powstanie, ale już właśnie na etapie budowy (jak i pisania testów), można przemyśleć strukturę tejże tabeli i opisać ją poprzez konkretne zapisy w klasie modelu. Jak widać na powyższym przykładzie nasz pojedynczy rekord będzie miał na pewno adres (o pewnej maksymalnej długości), opis (też maksymalna długość), datę dodania oraz ID kategorii linków, który to będzie kluczem obcym wskazującym na pojedynczą kategorię, do której link jest przypisany (musi być przypisany, stąd ograniczenie category_id do wartości różnych niż NULL i pustych). Grails (lub też sam ORM – również Hibernate) doda do tego rekordu w sposób automatyczny własność ID, a także wersję – więcej o tym w kolejnych wpisach.

To tyle. Naprawdę. To już koniec, pomijając testy, mamy działający model. Teraz zatem wypadałoby stworzyć kontroler, który ogarnie ten temat. Prawy klik na katalogu z kontrolerami, New->Grails Controller, wpisujemy nazwę Linki i po chwili magii Netbeans mamy klasę kontrolera, kolejny test integracyjny i folder na widoki powiązane z nowym kontrolerem. Oto nasza klasa:

class LinkiController {
def index = { }
}

Nasze zadanie jest proste – trzeba istniejący kod zamienić na taki:

def scaffold = Linki

Uruchamiamy projekt, przechodzimy pod adres http://127.0.0.1/Howtojava/linki/list i co? Taaak, wiem, że widok budujący. Oto Grailsy automatycznie wygenerowały stronkę z pełną funkcjonalnością CRUD. Oczywiście wygląda to… nie wygląda, zwykłe tekstowe linki z parametrami przekazywanymi przez GET, no ale miło zobaczyć coś powstałe z niczego.

linczek

Mamy najzwyklejszą listę – kwestia tylko w tym, iż nie mamy za bardzo czego na niej wylistować. Zawsze jednakże możemy kliknąć New Linki i oto co ukaże się naszym oczom:

createlinki

Formularz wymaga dopracowania – nazwy pól powinny być po polsku, komunikaty o błędzie też (spróbujcie utworzyć nowy link nie wpisując np. liczby całkowitej w polu categoryid). Pojawi się komunikat po wysłaniu formularza. Do tego wybór kategorii powinien być rozwijaną listą, a nie wpisywaniem liczby całkowitej. No ale to temat na najbliższe wpisy. Wpiszmy testowe dane i utwórzmy nowy link. Oto efekt po wysłaniu formularza:

newlink

Pokazał nam się dodany właśnie wpis – możemy go edytować, albo też usunąć. Żyć nie umierać. Wróćmy do listy wszystkich linków – http://localhost:8080/Howtojava/linki/list – jak widać mamy dodany właśnie link pięknie pokazany na pozycji pierwszej. Jedyny minus to to, że po zakończeniu działania aplikacji dane te zostaną utracone. Zajmę się tym w następnym wpisie.

One thought on “Grailsujemy z bazą, czyli tworzymy linki cz.1

Leave a comment