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

Serge P Nekoval Grails

  • Upload
    rit2010

  • View
    498

  • Download
    1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Serge P  Nekoval Grails

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

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

(Грамант)

Page 2: Serge P  Nekoval Grails
Page 3: Serge P  Nekoval Grails

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

Page 4: Serge P  Nekoval Grails

Жалобы трудящихся• Сложность освоения

• Отсутствие интегрированного решения

• Длинный цикл разработки

Page 5: Serge P  Nekoval Grails

Grails• Легок в освоении

• Быстрота разработки

• Без изобретения велосипедов!

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

Экскурсия в Grails• Язык Groovy• Как разрабатывается веб-приложение на

Grails• Тестирование, сборка, развертывание

Page 8: Serge P  Nekoval Grails
Page 9: Serge P  Nekoval Grails

Groovy

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

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

Page 10: Serge P  Nekoval Grails

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

Page 11: Serge P  Nekoval Grails

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

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

Page 12: Serge P  Nekoval Grails

Groovy• Компилируется в байт-код• Динамический ОО с необязательной

типизацией• Вызов любого Java-кода и наоборот• Поддерживает closures

Page 13: Serge P  Nekoval Grails

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

Groovy за 2 минуты

• Метаклассы: Integer.metaClass.sqr << {-> this * this }

• Перегрузка операторов

• GString: “My name is ${name}”

Page 15: Serge P  Nekoval Grails

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

confcontrollersdomainservicestaglibviews

srcgroovyjava

testweb-app

WEB-INF

Page 16: Serge P  Nekoval Grails

Среды

• Development• Test• Production

Page 17: Serge P  Nekoval Grails

Пишем веб-приложение• Сущности• Сервисы• Контроллеры• GSP-страницы, тэги, фильтры

Page 18: Serge P  Nekoval Grails

MVC в Grails

Page 19: Serge P  Nekoval Grails

Сущность

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

Page 20: Serge P  Nekoval Grails

class Book {String titlestatic constraints = {

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

} }

Page 21: Serge P  Nekoval Grails

Scaffolding

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

Page 22: Serge P  Nekoval Grails

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

Page 23: Serge P  Nekoval Grails

Many-to-oneclass Book {

String titlestatic belongsTo = [author:Author]

}One-to-many

static hasMany = [books:Book]

Page 24: Serge P  Nekoval Grails

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

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

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

Page 25: Serge P  Nekoval Grails

Сервисы

• Комплексная бизнес-логика• Dependency Injection

Page 26: Serge P  Nekoval Grails

Тесты

• Unit• Integration (Spring)

Page 27: Serge P  Nekoval Grails

Сборка

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

Page 28: Serge P  Nekoval Grails

Build DSLgrails.project.dependency.resolution = {

dependencies {runtime 'postgresql:postgresql:8.3-

604.jdbc4‘}

}

Артефакт Maven

Page 29: Serge P  Nekoval Grails

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

Page 30: Serge P  Nekoval Grails

Вопросы?

http://grails.org

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