Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Serge P Nekoval Grails

733 views

Published on

  • Be the first to comment

  • Be the first to like this

Serge P Nekoval Grails

  1. 1. Grails. Поиски закончены. Сергей Нековаль «Грамант»
  2. 2. Заголовок слайда <ul><li>Текст слайда, рисунки. Старайтесь не захламлять текст лишними данными, параметрами. Вот немного тезисов : </li></ul><ul><li>Для демонстрации используются плазмы – соотношение сторон 16 :9 !; </li></ul><ul><li>Залы будут длинными (в среднем около 20 метров), поэтому текст должен быть заметным ; </li></ul><ul><li>Код на слайде – плохая идея, он плохо читается издалека ; </li></ul><ul><li>Не забывайте выделять ключевые моменты ; </li></ul><ul><li>Формат презентации – Microsoft Power Point ( как 2003, так и 2007) и PDF. </li></ul>
  3. 3. Зоопарк Что выбрать?
  4. 4. <ul><li>Rapid </li></ul><ul><li>Dynamic </li></ul><ul><li>Robust </li></ul>
  5. 5. Grails <ul><li>Динамический язык Groovy </li></ul><ul><li>Rapid! Все лучшее из Ruby on Rails </li></ul><ul><li>Проверенные решения: Spring, Hibernate, SiteMesh </li></ul>
  6. 6. Умные слова <ul><li>MVC Model-View-Controller </li></ul><ul><li>DSL Domain-Specific Language </li></ul><ul><li>DI Dependency Injection </li></ul><ul><li>DDD Domain Driven Design </li></ul><ul><li>ORM Object-Relational Mapping </li></ul><ul><li>CC Convention over configuration </li></ul>
  7. 7. Компилируется …
  8. 8. «Мой код компилируется» ОТМАЗКА #1 отлынивающего от работы программиста
  9. 9. Groovy <ul><li>Компилируется в байт-код </li></ul><ul><li>Динамический с необязательной типизацией </li></ul><ul><li>Вызов любого Java- кода и наоборот </li></ul><ul><li>Поддерживает closures </li></ul><ul><li> def myClosure = { a,b -> a + b } </li></ul>
  10. 10. Подарки от Groovy <ul><li>Можно не ставить ; и return </li></ul><ul><li>Можно игнорировать null : person?.name </li></ul><ul><li>Можно не объявлять исключения! </li></ul><ul><li>Можно не ставить скобки при вызове метода! </li></ul><ul><li>value ?: defaultValue </li></ul>Все, что так хотели Java- программисты, но боялись попросить
  11. 11. Grails <ul><li>90% кода динамически перекомпилируется </li></ul><ul><li>Старый добрый Servlet </li></ul><ul><li>Hibernate </li></ul><ul><li>Spring MVC + Spring WebFlow </li></ul><ul><li>SiteMesh </li></ul>
  12. 12. Базовое Grails- приложение <ul><li>grails-app </li></ul><ul><ul><ul><li>c onf </li></ul></ul></ul><ul><ul><ul><li>controllers </li></ul></ul></ul><ul><ul><ul><li>domain </li></ul></ul></ul><ul><ul><ul><li>services </li></ul></ul></ul><ul><ul><ul><li>taglib </li></ul></ul></ul><ul><ul><ul><li>views </li></ul></ul></ul><ul><li>src </li></ul><ul><ul><ul><li>groovy </li></ul></ul></ul><ul><ul><ul><li>java </li></ul></ul></ul>test <ul><li>web-app </li></ul><ul><ul><ul><li>WEB-INF </li></ul></ul></ul>
  13. 13. MVC в Grails <ul><li>Основано на Spring MVC/Spring WebFlow </li></ul><ul><li>SiteMesh </li></ul><ul><li>GSP – вариант JSP для языка Groovy </li></ul><ul><li>Настраивается абсолютно все! </li></ul>
  14. 14. Сущность <ul><li>Валидация полей </li></ul><ul><li>Основа для схемы БД ( hbm2ddl) </li></ul><ul><li>Основа для scaffolding </li></ul>
  15. 15. <ul><li>class Book { </li></ul><ul><li>String title </li></ul><ul><li>static constraints = { </li></ul><ul><li>title(blank: false , nullable: false , size:5..150) </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  16. 16. GORM (Grails ORM) <ul><li>Очень мощный фантик для Hibernate 3 </li></ul><ul><li>Можно использовать отдельно от Grails </li></ul><ul><li>Версионирование </li></ul><ul><li>Mapping DSL </li></ul><ul><li>Criteria DSL , HQL, транзакции и т.д. </li></ul>
  17. 17. Примеры <ul><li>class Book { </li></ul><ul><li>String title </li></ul><ul><li>String contents </li></ul><ul><li>static mapping = { </li></ul><ul><li>contents type: &quot;text“ </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  18. 18. <ul><li>class Book { </li></ul><ul><li>String contents </li></ul><ul><li>static mapping = { </li></ul><ul><li>if (environment == PRODUCTION) { </li></ul><ul><li> contents type: &quot;text“ </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. Many-to-one <ul><li>class Book { </li></ul><ul><li>String title </li></ul><ul><li>static belongsTo = [author:Author] </li></ul><ul><li>} </li></ul>One-to-many static hasMany = [books:Book]
  20. 20. def pushkin = Author.get(1) def onegin = Book.findByTitle( «Евгений Онегин» ) def onegin = Book.findByAuthorAndTitleLike (pushkin, «%Онегин%») println «Пушкин написал ${Book.countByAuthor(pushkin)} книг.»
  21. 21. Транзакции? ЛЕГКО! Book.withTransaction { def book = new Book(title: «Метель») pushkin.addToBooks(book).save() }
  22. 22. Scaffolding <ul><li>Генерация controller + view </li></ul><ul><li>Быстро создать скелет приложения </li></ul><ul><li>Что-то поправить </li></ul>
  23. 23. Сборка <ul><li>На выходе – WAR файл </li></ul><ul><li>Управление сборкой: Gant </li></ul><ul><li>Зависимости: Maven, Ivy </li></ul>
  24. 24. Build DSL <ul><li>grails.project.dependency.resolution = { </li></ul><ul><li>dependencies { </li></ul><ul><li>runtime ' postgresql:postgresql:8.3-604.jdbc4 ‘ </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Артефакт Maven
  25. 25. Тесты <ul><li>Unit </li></ul><ul><li>Integration </li></ul>
  26. 26. Причины популярности <ul><li>Низкий порог входа </li></ul><ul><li>Быстрая разработка </li></ul><ul><li>Поддержка IDE: NetBeans, IDEA, Eclipse </li></ul><ul><li>Стабильность и переносимость платформы </li></ul><ul><li>Плагины </li></ul>
  27. 27. Вопросы? http://grails.org Сергей Нековаль / [email_address]

×