Grails
คือ Rapid
Web Framework ที่ใช้ภาษา Groovy ในการพัฒนา ได้แรงบันดาลใจจาก Ruby on Rails นั่นคือใช้แนวคิด
MVC โดยแต่ละส่วนมีรายละเอียดดังนี้
M =
Model สำหรับ
Grails จะเรียกว่า
Domain Class ซึ่ง Grails ได้เตรียม Persistence
Framework ชื่อ GORM ซึ่งใช้ ActiveRecord
Pattern โดยมีลักษณะเป็น Rich Model คือส่วน data
และส่วน operation อยู่ใน class เดียวกัน Business Logic และ Business
Rule ต่างๆ จะอยู่ใน Domain Class เลย
โดยมีความสามารถต่างๆ มากมาย เช่น
การค้นหาข้อมูลซึ่งมีการใช้ dynamic method ทำให้ค้นข้อมูลได้ง่ายและยืดหยุ่น
ซึ่งเราระบุชื่อฟิลด์ที่เป็นเงื่อนไขการค้นลงใจชื่อ method ได้เลย เช่น
def
user = User.findByUsernameAndPassword('user1', 'password')
|
V = View คือส่วนแสดงผลลัพธ์และส่วนรับข้อมูลเพื่อนำไปใช้หรือประมวลผล code จะเป็น HTML ผสมกับ tag library ของ Grails เอง จะมีเฉพาะ
code กำหนดรูปแบบการแสดงผล หรือ logic
เฉพาะส่วนแสดงผลเท่านั้น ตัวอย่างดังนี้
§
${topic.title}
C = Controller เป็นที่ซึ่งมี logic สำหรับควบคุม flow ของเพจ
ในแต่ละ Controller จะเก็บ Action ต่างๆ ซึ่งเรา define ไว้ด้วย
Closure ในการเรียกแต่ละเพจจะเป็นการระบุ Action
ที่ต้องการกระทำ ไม่ว่าจะเป็นเพื่อแสดงผล
หรือประมวลผลใดๆ ก็ตาม มีรูปแบบดังนี้
โดยที่
controller
คือชื่อ class Controller และ action คือชื่อ Closure
ในระบบเล็กๆ เราสามารถใส่
code ส่วนเรียกใช้ Domain Class ใน Action
ได้เลย แต่หากเป็นระบบใหญ่ควรจะใส่ไว้ที่
Service จะดีกว่า
Data
Binding มีการ bind ค่าจาก html form มายัง
Model ด้วยการส่งตัวแปร params เข้าไปใน
constructor ของ Domain Class ดังนี้
def
user = new
User(params)
|
Domain
Relationship Domain Class มีความสัมพันธ์ได้ดังนี้
§
one to one
§
one to many
§
many to many
โดยที่ความสัมพันธ์ต่างๆ
จะถูกกำหนดไว้ที่ Domain Class เลย
สำหรับส่วนสุดท้ายผมไม่รู้จะจัดหัวข้ออย่างไรดีจึงจะเหมาะ เพราะมันเป็นแค่ประโยคสั้นๆ
เป็นเหมือน tip&trick หรือข้อควรจำเท่านั้น
ผมจึงของ list ไว้ตรงนี้เลยแล้วกันครับ
(อาจะมีเพิ่มได้ภายหลัง)
1. Grails เริ่มต้นด้วย
grails command
2. เริ่มต้นใช้ grails ต้องต่อ
Internet
3. เมื่อสั่ง grails run-app สามารถเรียก app ผ่าน IE ได้เลยเพราะ
grails จะทำการ compile และ start
jetty ให้แล้ว
4. ขณะ run-app อยู่นั้น
หากเราแก้ไข code ส่วนใดก็ตามและทำการบันทึกเท่านั้น
grails จะ re-compile code นั้นให้เราเลย
5. topic?.id หมายความว่าหาก object topic ไม่เป็น null ให้อ้างค่า id
6. flash.message ได้แนวคิดจาก Rails เป็น session variable ที่มี life time = current request to next request
7. ฟิลด์ที่สร้างใน
Domain
Class จะถูกนำไปสร้างเป็น table field ในฐานข้อมูล
นอกจากฟิลด์ที่มีชื่ออยู่ใน list ของ static
transients
8. ตารางที่ได้จาก Domain Class จะมีฟิลด์ ID ซึ่งเป็น identity และ version ไว้สำหรับทำ Optimistic Locking
9. ในหน้าจอ add หรือ edit
ของ scaffold นั้น ฟิลด์ต่างๆ
จะแสดงและเรียงตามที่เราระบุในส่วน constrain ของ Domain
Class
10. เราสามารถเก็บฟิลด์
CreatedDate
ใน Domain Class ได้ และ assign ค่าให้เลยก็ได้หากไม่ต้องการให้ผู้ใช้กรอก
11. default ของ
GORM ใช้ Optimistic Locking
ทดสอบ Hello World
with Grails Application
ต่อมาลองสร้าง Grails Application อย่างง่ายกันครับ ดังนี้
1. สร้าง application ด้วยคำสั่ง
Quote
grails create-app HelloWorld
2. Grails จะสร้าง folder HelloWorld ซึ่งมีโครงสร้างของ folder ดังนี้

จากรูปอธิบายคร่าวๆ ได้ดังนี้
conf => จะเก็บ configuration ต่างๆ เช่น DataSource, BootStrap, UrlMapping
----- ส่วนของ MVC framework [ Model-View-Controller ] ------
controllers => เก็บ Controller
domain => Domain หรือ Model ซึ่งเทียบได้กับ Java Bean, Value Object ประมาณนั้น
view => ใน Java คือ JSP แต่ใน Grails จะชื่อว่า GSP
โดยใน view จะมี
ชื่อ folder แยกตาม domain
ชื่อ file จะแยกตาม method ใน controller
lib => สำหรับ library ต่างๆ ที่ต้องการใช้เช่น JDBC Driver เป็นต้น
test จะประกอบไปด้วย unit testing และ integration testing ซึ่งจะอธิบายการใช้งานในหัว Part ถัดๆ ไป
3. Start Grails Application โดยจะต้องเข้าไปที่ folder HelloWorld ก่อน แล้วพิมพ์คำสั่งดังนี้
Quote
grails
run-app
ให้ทำการ run URL นี้ใน browser ::: http://localhost:8080/HelloWorld จะได้ผลดังนี้

วันนี้มาลองสร้างระบบ User Profile แบบง่ายๆ กันครับ
ผมวางระบบคร่าวๆ ไว้ดังนี้
- Domain class ชื่อ User จะประกอบไปด้วย username, password, firstname, lastname
- Controller ชื่อ User
มาเริ่มกันเลย
1. สร้าง domain class ด้วยคำสั่ง
Quote
grails create-domain-class User
จากคำสั่งนี้จะสร้าง file User.groovy ใน folder domain ตาม structure ของ Grails Application
ต่อมาให้เปิด file ขึ้นมาแล้ว edit ตามนี้
class User {
String username;
String password;
String firstname;
String lastname
}
2. สร้าง controller ด้วยคำสั่ง
Quote
grails create-controller User
จากคำสั่งนี้จะสร้าง file UserController.groovy ใน folder controllers ตาม structure ของ Grails Application
ต่อมาให้เปิด file ขึ้นมาแล้ว edit ตามนี้
class UserController {
def scaffold = User;
//def index = { }
}
โดย Scaffold นั้นเป็นการกำหนดให้ grails ทำการสร้าง views และ Action/Method ต่างๆ ใน controller ตาม create/read/update/delete (CRUD) operation แบบอัตโนมัติ
3. start grails application ด้วยคำสั่ง grails run-app เหมือนเดิม จะได้ผลดังนี้



จะสังเกตุได้ว่า ผมไม่ต้องไปยุ่งเกี่ยวกับการกำหนด Database เลย เนื่องจาก default database ของ Grails นั้นคือ HSQLDB แต่ถ้าต้องใช้ database ตัวอื่น จะต้องกำหนดใน /conf/DataSource.groovy และนำ JDBC driverมาใส่ไว้ใน /lib/