Grails (2)

Setelah kita membuat sebuah proyek denga create-app, maka selanjutnya maka kita akan membuat klas domain dengan create-domain-class. Klas Doamain (Domain class) merupakan inti dari semua aplikasi bisnis.
caranya:

c:\java-apps\racetrack>grails create-domain class

Setelah itu ketikkan Race, maka akan muncul :


create-domain-class:
[input] Enter domain class name:
Race

[echo] Domain class created: grails-app/domain/Race.groovy

[echo] Created test suite: grails-tests/RaceTests.groovy
BUILD SUCCESSFUL
Total time: 5 seconds

Dalam hal ini Grails tidak hanya membuat Domain class tetapi juga Unit class.

Setelah itu lakukan hal yang sama dengan memciptakan domain class utk Registration.

Setelah domain class Race dan Registration dibuat maka kita akan mencoba menkofigurasi isi dari setiap domain class.
Utk doamin class Race bisa dibuka pada c:/java-apps/racetrack/grails-app/domain/Race.groovy. Kita akan melihati isi awal dr file Race.groovy tersebut hanya terdiri dari:

class Race {

static constraints = {
}
}

maka kita akan menambahkan kode seperti di bawah ini:

class Race {
String name
Date startDateTime
String city
String state
Float distance
Float cost
Integer maxRunners = 100000

static hasMany = [registrations:Registration]

static constraints = {
}
}

dan utk domain class Registration (c:/java-apps/racetrack/grails-app/domain/Registration.groovy) kita tambahkan:

class Registration {
Race race
String name
Date dateOfBirth
String gender = ‘F’
String postalAddress
String emailAddress
Date createdAt = new Date()
static belongsTo = Race
static optionals = [“postalAddress” ]
}

utk pengertian masing2 kode yang kita tambahkan akan kita jelaskan sbb:

-> dalam claas Race memiliki nama, strat date/time dan lain sebagainya. Secara default setiap Race akan terdiri dari maksimum 100.000 pelari. Cukup dan familiar bukan dengan yang lain? Tapi, bagaimana dengan hasMany?

Kita tau dari sebuah sudut bisnis bahwa races dan registrations memiliki sebuah one-to-many relationship. Model domain Race memasukkan properti hasMany utk mensupport hubungan(relationship) tersebut. Properti hasMany menyatakan kepada Grails bahwa sebuat Race memiliki sebuah one-to-many relationship dengan beberapa class. Utk mengidentifikasikan class yang terlibat dalan hubungan/relationship tersebut, kita menunjuk sebuat map dari properti nama-class nama berpasangan dalam hasMany. Dalam kasus ini, kita mendeklerasikan properti registrations akan memegang sebuah collection dari objek Registration.

User telah mengatakan kepada kita bahwa atribut dari race adalah wajib begitu juga dengan sebagian besar dari atribut dari registration. Tetapi user melihat sepertinya internet akan dimengerti sehingga mereka memutuskan cukup hanya akan dengan e-mail address dan postal address seharusnya menjadi properti yang optional. Secara default, Grails mengasumsikan bahwa sebuah field adalan bener2 wajib. Jika secara khusus field tersebut tidak wajib lg makan kita harus mendeklarasikannya dengan cara mendefinisikan properti optionals.
Contohnya:
static optionals = [“postalAddress”, “gender”]

Dalam Domain class Race, kita mendeklerasikan bahwa objek Race akan menyimpan 0 atau lebih dari objek Registration. Kita tahu pasti bahwa kita tak akan bisa meregister utk sesuatu jika tidak ada. jadi kita haru mengatakan kepada Grails bahwa registration bergantung pada sebuah race. Sejak kita tahu bahwa semua field adalah wajib secar default, kita akan melihat bahwa kita tidak akan bisa menyimpan sebuah objek Registration, kalau tidak hal itu akan menghasilkan sebuah nilai non-null utk properti race. Untuk itu properti belongsTo mengidentifikasikan sisi dari pemilik dari one-to-many relationship antara races dan registrations. Dengan dideklarasikannya sebuah registration belongs to sebuah race maka Grails menjamin bahwa dengan penghapusan sebuah registration tidak akan menghapus yang berhubungan dengan race, tetapi penghapusan sebuah race akan secra nyata mengahapus semua yang berhubungan dengan registrations.