Download - Serge P Nekoval Grails
![Page 1: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/1.jpg)
Grails. Поиски закончены.
Сергей Нековаль
(Грамант)
![Page 2: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/2.jpg)
![Page 3: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/3.jpg)
Зоопарк Что выбрать?
![Page 4: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/4.jpg)
Жалобы трудящихся• Сложность освоения
• Отсутствие интегрированного решения
• Длинный цикл разработки
![Page 5: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/5.jpg)
Grails• Легок в освоении
• Быстрота разработки
• Без изобретения велосипедов!
![Page 6: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/6.jpg)
Умные слова• MVC Model-View-Controller• DSL Domain-Specific Language• DI Dependency Injection• DDD Domain Driven Design• ORM Object-Relational Mapping• CC Convention over configuration
![Page 7: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/7.jpg)
Экскурсия в Grails• Язык Groovy• Как разрабатывается веб-приложение на
Grails• Тестирование, сборка, развертывание
![Page 8: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/8.jpg)
![Page 9: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/9.jpg)
Groovy
Все, что так хотели Java-программисты,
но боялись попросить
![Page 10: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/10.jpg)
Компилируется…
![Page 11: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/11.jpg)
«Мой код компилируется»ОТМАЗКА #1
отлынивающего от работы программиста
![Page 12: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/12.jpg)
Groovy• Компилируется в байт-код• Динамический ОО с необязательной
типизацией• Вызов любого Java-кода и наоборот• Поддерживает closures
![Page 13: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/13.jpg)
Groovy за 1 минутуdef myClosure = { a,b -> a + b }def map = [x:1, y:1], list = [1, 2, 3, 4]assert map.x == map[‘x’]assert [-1, 0, 1, 2].find{it > 0} == 1‘0123456789’[2..5] == ‘2345’
![Page 14: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/14.jpg)
Groovy за 2 минуты
• Метаклассы: Integer.metaClass.sqr << {-> this * this }
• Перегрузка операторов
• GString: “My name is ${name}”
![Page 15: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/15.jpg)
Базовое Grails-приложениеgrails-app
confcontrollersdomainservicestaglibviews
srcgroovyjava
testweb-app
WEB-INF
![Page 16: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/16.jpg)
Среды
• Development• Test• Production
![Page 17: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/17.jpg)
Пишем веб-приложение• Сущности• Сервисы• Контроллеры• GSP-страницы, тэги, фильтры
![Page 18: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/18.jpg)
MVC в Grails
![Page 19: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/19.jpg)
Сущность
• Валидация полей• Основа для схемы БД (hbm2ddl)• Основа для scaffolding
![Page 20: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/20.jpg)
class Book {String titlestatic constraints = {
title(blank:false, nullable:false, size:5..150)
} }
![Page 21: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/21.jpg)
Scaffolding
• Генерация controller + view• Быстро создать скелет приложения• Что-то поправить
![Page 22: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/22.jpg)
GORM (Grails ORM)• Очень мощный фантик для Hibernate 3• Можно использовать отдельно от Grails• Версионирование (optimistic locking)• Mapping DSL• Criteria DSL, HQL, транзакции и т.д.
![Page 23: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/23.jpg)
Many-to-oneclass Book {
String titlestatic belongsTo = [author:Author]
}One-to-many
static hasMany = [books:Book]
![Page 24: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/24.jpg)
def pushkin = Author.get(1)def onegin = Book.findByTitle(«Евгений Онегин»)def onegin = Book.findByAuthorAndTitleLike
(pushkin, «%Онегин%»)
println «Пушкин написал \ ${Book.countByAuthor(pushkin)} книг.»
![Page 25: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/25.jpg)
Сервисы
• Комплексная бизнес-логика• Dependency Injection
![Page 26: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/26.jpg)
Тесты
• Unit• Integration (Spring)
![Page 27: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/27.jpg)
Сборка
• На выходе – WAR файл• Управление сборкой: Gant• Зависимости: Maven, Ivy
![Page 28: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/28.jpg)
Build DSLgrails.project.dependency.resolution = {
dependencies {runtime 'postgresql:postgresql:8.3-
604.jdbc4‘}
}
Артефакт Maven
![Page 29: Serge P Nekoval Grails](https://reader035.vdocuments.net/reader035/viewer/2022070302/548c0e6ab479599b348b47b3/html5/thumbnails/29.jpg)
Причины популярности• Низкий порог входа• Быстрая разработка• Поддержка IDE: NetBeans, IDEA, Eclipse• Стабильность и переносимость платформы• Плагины