27
Grails. Поиски закончены. Сергей Нековаль «Грамант»

Serge P Nekoval Grails

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Serge P  Nekoval  Grails

Grails. Поиски закончены.

Сергей Нековаль

«Грамант»

Page 2: Serge P  Nekoval  Grails

Заголовок слайдаТекст слайда, рисунки. Старайтесь не захламлять текст лишними данными, параметрами. Вот немного тезисов:

• Для демонстрации используются плазмы – соотношение сторон 16:9!;

• Залы будут длинными (в среднем около 20 метров), поэтому текст должен быть заметным;

• Код на слайде – плохая идея, он плохо читается издалека;

• Не забывайте выделять ключевые моменты;

• Формат презентации – Microsoft Power Point (как 2003, так и 2007) и PDF.

Page 3: Serge P  Nekoval  Grails

Зоопарк Что выбрать?

Page 4: Serge P  Nekoval  Grails

RapidDynamicRobust

Page 5: Serge P  Nekoval  Grails

Grails• Динамический язык Groovy

• Rapid! Все лучшее из Ruby on Rails

• Проверенные решения: Spring, Hibernate, SiteMesh

Page 6: Serge P  Nekoval  Grails

Умные слова• 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

Компилируется…

Page 8: Serge P  Nekoval  Grails

«Мой код компилируется»ОТМАЗКА #1

отлынивающего от работы программиста

Page 9: Serge P  Nekoval  Grails

Groovy• Компилируется в байт-код• Динамический с необязательной типизацией• Вызов любого Java-кода и наоборот• Поддерживает closures

def myClosure = { a,b -> a + b }

Page 10: Serge P  Nekoval  Grails

Подарки от Groovy• Можно не ставить ; и return• Можно игнорировать null: person?.name• Можно не объявлять исключения!• Можно не ставить скобки при вызове метода!• value ?: defaultValue

Все, что так хотели Java-программисты,

но боялись попросить

Page 11: Serge P  Nekoval  Grails

Grails• 90% кода динамически перекомпилируется• Старый добрый Servlet• Hibernate• Spring MVC + Spring WebFlow• SiteMesh

Page 12: Serge P  Nekoval  Grails

Базовое Grails-приложениеgrails-app

confcontrollersdomainservicestaglibviews

srcgroovyjava

testweb-app

WEB-INF

Page 13: Serge P  Nekoval  Grails

MVC в Grails• Основано на Spring MVC/Spring WebFlow• SiteMesh• GSP – вариант JSP для языка Groovy• Настраивается абсолютно все!

Page 14: Serge P  Nekoval  Grails

Сущность• Валидация полей• Основа для схемы БД (hbm2ddl)• Основа для scaffolding

Page 15: Serge P  Nekoval  Grails

class Book {String titlestatic constraints = {

title(blank:false, nullable:false, size:5..150)

} }

Page 16: Serge P  Nekoval  Grails

GORM (Grails ORM)• Очень мощный фантик для Hibernate 3• Можно использовать отдельно от Grails• Версионирование• Mapping DSL• Criteria DSL, HQL, транзакции и т.д.

Page 17: Serge P  Nekoval  Grails

Примерыclass Book {

String titleString contentsstatic mapping = {

contents type: "text“}

}

Page 18: Serge P  Nekoval  Grails

class Book {String contentsstatic mapping = {

if (environment == PRODUCTION) { contents type: "text“

}}

}

Page 19: Serge P  Nekoval  Grails

Many-to-oneclass Book {

String titlestatic belongsTo = [author:Author]

}One-to-many

static hasMany = [books:Book]

Page 20: Serge P  Nekoval  Grails

def pushkin = Author.get(1)def onegin = Book.findByTitle(«Евгений Онегин»)def onegin = Book.findByAuthorAndTitleLike

(pushkin, «%Онегин%»)

println «Пушкин написал \ ${Book.countByAuthor(pushkin)} книг.»

Page 21: Serge P  Nekoval  Grails

Транзакции?

ЛЕГКО!Book.withTransaction {

def book = new Book(title: «Метель»)pushkin.addToBooks(book).save()

}

Page 22: Serge P  Nekoval  Grails

Scaffolding• Генерация controller + view• Быстро создать скелет приложения• Что-то поправить

Page 23: Serge P  Nekoval  Grails

Сборка

• На выходе – WAR файл• Управление сборкой: Gant• Зависимости: Maven, Ivy

Page 24: Serge P  Nekoval  Grails

Build DSLgrails.project.dependency.resolution = {

dependencies {runtime 'postgresql:postgresql:8.3-

604.jdbc4‘}

}

Артефакт Maven

Page 25: Serge P  Nekoval  Grails

Тесты• Unit• Integration

Page 26: Serge P  Nekoval  Grails

Причины популярности• Низкий порог входа• Быстрая разработка• Поддержка IDE: NetBeans, IDEA, Eclipse• Стабильность и переносимость платформы• Плагины

Page 27: Serge P  Nekoval  Grails

Вопросы?

http://grails.org

Сергей Нековаль / [email protected]