Grails ile Web Development 02: Scaffolding

Önceki yazımızda grails komut satırını kullanarak, ilk grails projemizi üretmiştik. Yazı dizisinin bu bölümünde, CRUD ekranlarını anlatacağım. Öncelikle, üretilen uygulamanın dosya yapısını tanıyalım. Aşağıda, yazımızın 1. bölümünde ürettiğimiz projenin dosya yapısı(folder structure) görünmektedir. Bazı önemli olduğunu düşündüğüm dosyaların kısaca üzerinden geçelim. Dosya yapısını incelerken, Grails’in Convention over Configuration yöntemini uyguladığına tanıklık edeceğiz:

grails-dosya-yapisi-folder-structure

  • /home/halil/kodcu.com/01-grails-ornegi: Projenin kök dizini
    • grails-app/:
      • conf/: Projenin konfigürasyon dosyaları bu klasörün altındadır. Hibernate ve Spring konfigurasyonları da bu klasörün altındadır. Grails konfigürasyon dosyalarını otomatik olarak üretir ve uygulamaya entegre eder.
      • controllers/: Controller katmanına ait controller class’larını bu klasörün altında olmalıdır. Grails, controller class’larını bu klasör altında arar. Böylece, herhangi bir xml dosyasında controller listesi tutmaya gerek kalmaz.
      • domain/: Model katmanına ait classlar bu klasörün altındadır.
      • views/: View katmanına ait dosyalar burada duruyor.
      • taglib/: View katmanında kullanacağımız taglib’ler bu klasörün altında olmalıdır.
      • i18n/: Dil dosyaları bu klasörün altındadır.
    • lib/
    • scripts/:
    • src/:
    • target/: Maven’dan aşina olduğumuz bu klasörün altında derlenmiş classlar bulunur.
    • test/: Unit testler için yazılan test classları
    • web-app/: Uygulamamız, war dosyası haline getirilmeden önce, bu klasörün altında birleştirilir.

Aşağıdaki gibi uygulamamızı üretelim:

[email protected]:~/kodcu.com$ pwd
/home/halil/kodcu.com
[email protected]:~/kodcu.com$ grails create-app 02-scaffolding
| Created Grails Application at /home/halil/kodcu.com/02-scaffolding
[email protected]:~/kodcu.com$ cd 02-scaffolding/
[email protected]:~/kodcu.com/02-scaffolding$ 
[email protected]:~/kodcu.com/02-scaffolding$ grails
| Enter a script name to run. Use TAB for completion:
grails>

Ardından ilk domain class’ımızı üretelim. Domain class’ini üretmek için, “create-domain-class” komutunu kullanacağız. Grails konsolu, Spring Roo’daki gibi TAB karakteri ile komut tamamlama özelliğini desteklemektedir. Aşağıdaki örnekte, “create-” yazarak TAB karakterine bastığımızda “create-” ile başlayan komutlar listeniyor:

grails> create-

create-controller         create-domain-class      create-filters
create-hibernate-cfg-xml  create-integration-test  create-multi-project-build
create-plugin             create-pom               create-scaffold-controller
create-script             create-service           create-tag-lib
create-unit-test
grails> create-domain-class com.kodcu.User
| Created file grails-app/domain/com/kodcu/User.groovy
| Created file test/unit/com/kodcu/UserTests.groovy

User adlı domain class’ının grails-app/domain klasörü altında oluşturulduğuna dikkatinizi çekmek isterim. Aşağıda üretilen kodun içeriğini görmekteyiz. Kodun java’yla benzerliği dikkatinizi çekmiş olmalı. Bu kod groovy diliyle hazırlanmıştır:

package com.kodcu

class User {	 	 
 static constraints = {	 	 
 }	 	 
}

constraints bölümünü validasyon uygulamak için kullanacağız. Şimdilik bu haliyle bırakalım. Uygulama kullanıcılarımızı modellemek üzere, User classının içine, isim, email adresi ve doğum günü bilgileri ekleyelim:

package com.kodcu	 	

class User {	 	 
 String name	 	 
 String email	 	 
 Date birthDate	

 static constraints = {	 	 
 }	 	 
}

Java’da kullandığımız data tiplerini kullanarak name, email ve birthDate alanlarını ekledik. Satır sonunda noktalı virgül kullanmadık. Grails’in MVC mimarisine uygun olarak hazırladığı uygulamamızın Model kısmını tamamladık.

Controller

User adlı domain class’ımızı oluşturduk. Şimdi de, User class’i için controller class’ımızı oluşturalım. Bunu generate-controller komutu ile gerçekleştirecegiz. Komutu yazdıktan sonra TAB’a basarsanız domain class’ını otomatik olarak tamamlandığını göreceksiniz. Projemizde şu anda sadece 1 tane domain class’ı olduğu için, Grails otomatik komutu otomatik olarak tamamlıyor.

grails> generate-controller com.kodcu.User 
| Created file grails-app/controllers/com/kodcu/UserController.groovy
| Created file grails-app/views/user
| Created file test/unit/com/kodcu/UserControllerSpec.groovy

UserController adlı controller class’ı grails-app/controllers klasörü altında oluşturuldu. Ayrıca User’a ait view dosyalarını için bir de grails-app/views/user klasörü oluşturuldu. Şu anda bu klasörün içi boş.

UserController.groovy class’ın içeriğini görmek üzere aşağıdaki ekran görüntüsünü inceleyebilirsiniz:

grails-scaffolding-controller

Ekran görüntüsünden de görüldüğü üzere, CRUD işlemleri için temel metodların üretildiğini görüyoruz.

View

User adlı domain ve UserController adlı controller classlarını oluşturduk. Şimdi de, uygulamamızın View katmanını oluşturalım. Bunu generate-views komutu ile gerçekleştirecegiz. Komutu yazdıktan sonra TAB’a basarsanız domain class’ını otomatik olarak tamamlandığını göreceksiniz. Projemizde şu anda sadece 1 tane domain class’ı olduğu için, Grails otomatik komutu otomatik olarak tamamlıyor:

grails> generate-views com.kodcu.User 
| Finished generation for domain class com.kodcu.User

User class’ı için scaffolding işlemini tamamladık. Şimdi uygulamamızı çalıştırıp, üretilen uygulamayı keşfedelim. İlk yazımızda öğrendiğimiz run-app komutuyla uygulamamızı çalıştırıyoruz:

grails> run-app
| Server running. Browse to http://localhost:8080/02-scaffolding
| Application loaded in interactive mode. Type 'stop-app' to shutdown.
| Enter a script name to run. Use TAB for completion: 
grails>

http://localhost:8080/02-scaffolding adresini kullanarak anasayfayı açıyoruz. Anasayfaya “com.kodcu.UserController” linki eklenmiş.

02-scaffolding-homepage

com.kodcu.UserController’a tıklayarak http://localhost:8080/02-scaffolding/user/index adresine gidiyoruz. Karşımızda boş bir “User List” ekranı görüyoruz. Henüz herhangi bir kayıt yaratmadığımız için User List ekranı boş. Ekranda “Home” ve “New User” butonları var:

02-scaffolding-list

“New User” butonuna basıyoruz ve aşağıdaki formla karşılaşıyoruz. Ekranda 3 alanlı bir form görüntüleniyor. Bu alanlar, domain class’ımızdaki değişkenlerle örtüştüğünü görüyoruz. Date tipinde tanımlamış olduğumuz birthDate alanına karşılık Gün/Ay/Yıl şeklinde üçlü bir drop-down, String tipinde tanımlamış olduğumuz email ve name alanları için de birer tane text input :

02-scaffolding-createuser

Create tuşuna basarak ilk User kaydımızı oluşturuyoruz ve Show User ekranı görüntüleniyor. Ekrandaki Edit butonuyla oluşturduğumuz kaydı güncelleyebilir, Delete tuşuyla da kaydı silebiliriz.

02-scaffolding-createduser

User List tuşuna bastığımızda, oluşturduğumuz kaydı, listede göreceğiz.

Özet

User domain class’ını oluşturduktan sonra, 2 komutlarla scaffolding işlemini tamamladık.

generate-controller com.kodcu.User
generate-views com.kodcu.User

Ekstra Bilgi

Aşağıdaki tek komutla da scaffolding işlemini gerçekleştirebiliriz:

generate-all com.kodcu.User
1 Comment
  • Dilara
    Posted at 10:25, 11/09/2018

    Merhaba ben bütün adımları sırasıyl yaptım fakat create domain class komutunu kullandığımız yerde groovy uzantılı kodu nasıl açıldığını bulamadım. Grails konsoluna grails-app/domain /… Şeklinde uzantıyı yazdığımda da açamadım. Yardımcı olabilir misiniz?

Post a Comment

Comment
Name
Email
Website