Grails (фреймворк)

Фреймворк веб-приложений с открытым исходным кодом
Грааль
Разработчик(и)Грэм Роше
Первоначальный выпускОктябрь 2005 г.
Стабильный релиз
6.2.2 [1] / 2024-11-20
РепозиторийРепозиторий Grails
Написано вКруто
Операционная системаКроссплатформенный
ПлатформаКроссплатформенность ( JVM )
ТипФреймворк веб-приложений
ЛицензияЛицензия Apache 2.0
Веб-сайтgrails.org

Grails — это фреймворк веб-приложений с открытым исходным кодом , использующий язык программирования Apache Groovy [2] : 757, §18  (который, в свою очередь, основан на платформе Java ). Он призван стать высокопроизводительным фреймворком, следуя парадигме « кодирования по соглашению », предоставляя автономную среду разработки и скрывая большую часть деталей конфигурации от разработчика. [ необходима цитата ]

Grails ранее был известен как «Groovy on Rails»; в марте 2006 года это название было отменено в ответ на просьбу Дэвида Хайнемайера Ханссона , основателя фреймворка Ruby on Rails . [3] Работа началась в июле 2005 года, с релизом 0.1 29 марта 2006 года и релизом 1.0, анонсированным 18 февраля 2008 года.

Обзор

Grails был разработан для решения ряда задач:

  • Предоставить веб-фреймворк для платформы Java.
  • Повторное использование существующих технологий Java, таких как Hibernate и Spring, в едином интерфейсе.
  • Предложить последовательную структуру разработки.
  • Предложить документацию по ключевым частям фреймворка:
    • Фреймворк персистентности .
    • Шаблоны с использованием GSP (Groovy Server Pages).
    • Динамические библиотеки тегов для создания компонентов веб-страниц.
    • Настраиваемая и расширяемая поддержка Ajax .
  • Предоставьте примеры приложений, демонстрирующих структуру.
  • Обеспечить полноценный режим разработки, включая веб-сервер и автоматическую перезагрузку ресурсов.

Маркетинг

Grails обладает тремя свойствами, которые отличают его от традиционных веб-фреймворков Java:

  • Нет конфигурации XML
  • Готовая к использованию среда разработки
  • Функциональность доступна через миксины

Нет конфигурации XML

Создание веб-приложений на Java традиционно подразумевает настройку сред и фреймворков в начале и во время разработки. Эта конфигурация очень часто выносится наружу в XML-файлах, чтобы упростить настройку и избежать встраивания конфигурации в код приложения.

XML изначально приветствовался, поскольку он обеспечивал большую согласованность для настройки приложений. Однако в последние годы стало очевидно, что хотя XML отлично подходит для настройки, настройка среды может быть утомительной. Это может снизить производительность, поскольку разработчики тратят время на понимание и поддержку конфигурации фреймворка по мере роста приложения. Добавление или изменение функциональности в приложениях, использующих конфигурацию XML, добавляет дополнительный шаг к процессу изменения, что замедляет производительность и может снизить гибкость всего процесса.

Grails устраняет необходимость добавлять конфигурацию в XML-файлы. Вместо этого фреймворк использует набор правил или соглашений при проверке кода приложений на базе Grails. Например, имя класса, заканчивающееся на Controller(например BookController), считается веб-контроллером.

Готовая к использованию среда разработки

При использовании традиционных веб-инструментариев Java разработчикам приходится собирать модули разработки, что может быть утомительно. Grails предоставляет среду разработки, которая включает веб-сервер, чтобы разработчики могли начать работу немедленно. Все необходимые библиотеки являются частью дистрибутива Grails, и Grails автоматически подготавливает веб-среду Java для развертывания.

Функциональность доступна через миксины

Grails предлагает динамические методы в нескольких классах через миксины. Миксин — это метод, который добавляется к классу динамически, как если бы функциональность была скомпилирована в программу.

Эти динамические методы позволяют разработчикам выполнять операции без необходимости реализовывать интерфейсы или расширять базовые классы. Grails предоставляет динамические методы на основе типа класса. Например, доменные классы имеют методы для автоматизации операций сохранения, таких как сохранение, удаление и поиск

Веб-фреймворк

Веб-фреймворк Grails разработан в соответствии с парадигмой MVC .

Контроллеры

Grails использует контроллеры для реализации поведения веб-страниц. Ниже приведен пример контроллера:

класс BookController { def list () { [ книги: Книга . список () ] } }          

Контроллер выше имеет listдействие, которое возвращает модель, содержащую все книги в базе данных. Для создания этого контроллера grailsиспользуется команда, как показано ниже:

Книга создания-контроллера Grails

Эта команда создает класс в grails-app/controllerкаталоге проекта Grails. Создание класса контроллера достаточно для того, чтобы Grails распознал его. listДействие отображается http://localhost:8080/book/listв режиме разработки.

Просмотры

Grails поддерживает JSP и GSP. В примере ниже показано представление, написанное на GSP, в котором перечислены книги в модели, подготовленной контроллером выше:

<html> <head> <title> Наши книги </title> </head> <body> <ul> <g:each in= "${books}" > <li> ${it.title} (${it.author.name}) </li> </g:each> </ul> </body> </html>             

Это представление должно быть сохранено как grails-app/views/book/list.gspпроект Grails. Это местоположение соответствует действию BookControllerи list. Поместить файл в это местоположение достаточно, чтобы Grails распознал его.

Также доступна ссылка на тег GSP.

Динамические библиотеки тегов

Grails предоставляет большое количество библиотек тегов «из коробки». [2] : 758-763, §18-2  Однако вы также можете легко создавать и повторно использовать свои собственные библиотеки тегов [2] : 792, §18-13  : [4]

class ApplicationTagLib { def formatDate = { attrs , body -> out << new java . text . SimpleDateFormat ( attrs . format ). format ( attrs . date ) } }              

Библиотека formatDateтегов выше форматирует java.util.Dateобъект в String. Эту библиотеку тегов следует добавить в grails-app/taglib/ApplicationTagLib.groovyфайл или файл, заканчивающийся на , TagLib.groovyв grails-app/taglibкаталоге.

Ниже приведен фрагмент файла GSP, который использует formatDateбиблиотеку тегов:

<g:formatDate format="yyyyMMdd" date="${myDate}"/>

Для использования динамической библиотеки тегов в GSP не нужно использовать импортные теги. Динамические библиотеки тегов также можно использовать в файлах JSP, хотя это требует немного больше работы. [1] Архивировано 2010-10-17 на Wayback Machine

Упорство

Модель

Модель домена в Grails сохраняется в базе данных с помощью GORM (Grails Object Relational Mapping). Классы домена сохраняются в каталоге grails-app/domainи могут быть созданы с помощью grailsкоманды, как показано ниже:

Grails создать-домен-класс Книга

BookЭта команда запрашивает имя класса домена и создает соответствующий файл. Ниже показан код класса :

класс Книга { Строка название Человек автор }      

Создание этого класса — все, что требуется для управления им для сохранения с помощью Grails. В Grails 0.3 GORM был улучшен и, например, добавляет свойства id и version к классу домена, если они отсутствуют. Свойство id используется как первичный ключ соответствующей таблицы. Свойство version используется для оптимистической блокировки.

Методы

Когда класс определен как класс домена, то есть класс, управляемый GORM, методы динамически добавляются для помощи в сохранении экземпляров класса. [2] Архивировано 19 октября 2010 г. на Wayback Machine

Методы динамического экземпляра

Метод save()сохраняет объект в базе данных:

def book = new Book ( title: "The Da Vinci Code" , author: Author . findByName ( "Dan Brown" )) book . save ()     

Метод delete()удаляет объект из базы данных:

def book = Book.findByTitle ( " Код да Винчи " ) book.delete ( )   

Метод refresh()обновляет состояние объекта из базы данных:

def book = Book.findByTitle ( " Код да Винчи " ) book.refresh ( )   

Метод ident()извлекает идентификатор объекта, назначенный из базы данных:

def book = Book.findByTitle ( " Код да Винчи " ) def id = book.ident ( )      

Динамические статические (классовые) методы

Метод count()возвращает количество записей в базе данных для заданного класса:

def bookCount = Книга . count ()   

Метод exists()возвращает значение true, если в базе данных существует объект с указанным идентификатором:

def bookExists = Книга . существует ( 1 )   

Метод find()возвращает первый объект из базы данных на основе оператора запроса объекта:

def book = Book . find ( "из Книги b, где b.title = ?" , [ 'Код да Винчи' ])      

Обратите внимание, что синтаксис запроса — Hibernate HQL .

Метод findAll()возвращает все объекты, существующие в базе данных:

def books = Книга . findAll ()   

Метод findAll()также может принимать оператор запроса объекта для возврата списка объектов:

def books = Книга . findAll ( "из Книги" )   

Методы findBy*()возвращают первый объект из базы данных, соответствующий определенному шаблону:

def book = Book . findByTitle ( "Код да Винчи" )   

Также:

def book = Book . findByTitleLike ( "%Да Винчи%" )   

Методы findAllBy*()возвращают список объектов из базы данных, соответствующих определенному шаблону:

def books = Book . findAllByTitleLike ( "The%" )   

Методы findWhere*()возвращают первый объект из базы данных, который соответствует набору именованных параметров:

def book = Book . findWhere ( title: "Код да Винчи" )   

Строительные леса

Grails поддерживает скаффолдинг для поддержки операций CRUD (создание, чтение, обновление, удаление). Любой класс домена может быть скаффолдирован путем создания контроллера скаффолдинга, как показано ниже:

класс BookController { static scaffold = true }      

Создав этот класс, вы можете выполнять операции CRUD на http://localhost:8080/book. Это работает, поскольку BookController следует тому же соглашению об именовании, что и класс домена Book. Чтобы создать каркас определенного класса домена, мы могли бы ссылаться на класс непосредственно в свойстве каркаса:

класс SomeController { static scaffold = Книга }      

В настоящее время Grails не предоставляет поддержку ассоциациям.

Устаревшие модели баз данных

Механизм сохранения в GORM реализован через Hibernate . Таким образом, устаревшие базы данных могут быть сопоставлены с классами GORM с использованием стандартных файлов сопоставления Hibernate.

Целевая аудитория

Целевая аудитория Grails:

  • Разработчики Java или Groovy, которым нужна интегрированная среда разработки для создания веб-приложений.
  • Разработчики без опыта работы с Java, ищущие высокопроизводительную среду для создания веб-приложений. [ необходима цитата ]

Интеграция с платформой Java

Grails построен на платформе Java и является ее частью, что делает его очень простым для интеграции с библиотеками Java, фреймворками и существующими кодовыми базами. Grails предлагает прозрачную интеграцию классов, которые сопоставлены с фреймворком Hibernate ORM . Это означает, что существующие приложения, использующие Hibernate, могут использовать Grails без перекомпиляции кода или перенастройки классов Hibernate, используя при этом методы динамического сохранения, описанные выше. [3] Архивировано 2011-07-16 в Wayback Machine

Одним из следствий этого является то, что scaffolding может быть настроен для классов Java, сопоставленных с Hibernate. Другим следствием является то, что возможности веб-фреймворка Grails полностью доступны для этих классов и приложений, которые их используют.

Grails также использует Spring Inversion of Control Framework; Grails на самом деле является приложением Spring MVC под капотом. [5] Фреймворк Spring может использоваться для предоставления дополнительных бинов Spring и введения их в контекст приложения. Фреймворк SiteMesh используется для управления уровнем представления, упрощая разработку страниц с помощью надежной системы шаблонов. [6]

Приложения Grails упакованы как военные артефакты, которые могут быть развернуты в любом контейнере сервлетов или серверах приложений Java EE . [2] : 763, §18-2 

Смотрите также

Ссылки

  1. ^ "Представляем Grails Framework 6.2.2 Release". grails.org . Получено 29.12.2024 .
  2. ^ abcd Дейнум и др. 2014.
  3. ^ Роше, Грэм. "Groovy on Rails больше нет (вроде как)". Архивировано из оригинала 7 мая 2010 г.
  4. ^ 7.3 Библиотеки тегов
  5. ^ «Документация Grails».
  6. ^ "Презентация Slideshare". 6 ноября 2010 г.
  • Дейнум, Мартен; Рубио, Дэниел; Лонг, Джош; Мак, Гэри (1 сентября 2014 г.). Весенние рецепты: подход «проблема-решение» (второе издание). Apress . ISBN 978-1-4302-2499-0.
  • Браун, Джефф; Роше, Грэм (15 января 2009 г.), Полное руководство по Grails (2-е изд.), Apress , стр. 648, ISBN 978-1-59059-995-2
  • Смит, Глен; Ледбрук, Питер (28 июня 2009 г.), Grails in Action (1-е изд.), Manning Publications , стр. 520, ISBN 978-1-933988-93-1
  • Абдул-Джавад, Башар (2 декабря 2008 г.), Groovy and Grails Recipes (1-е изд.), Apress , стр. 424, ISBN 978-1-4302-1600-1
  • Фишер, Роберт (20 апреля 2009 г.), Grails Persistence с GORM и GSQL (1-е изд.), Apress , стр. 125, ISBN 978-1-4302-1926-2, заархивировано из оригинала 16 декабря 2009 г. , извлечено 22 октября 2009 г.
  • M. Джадд, Кристофер; Нусайрат, Джозеф Фейсал; Шинглер, Джим (18 июня 2008 г.), Beginning Groovy and Grails: From Novice to Professional (1-е изд.), Apress , стр. 440, ISBN 978-1-4302-1045-0
  • Рудольф, Джейсон (6 февраля 2007 г.), Начало работы с Grails (1-е изд.), Lulu.com , стр. 132, ISBN 978-1-4303-0782-2
  • Официальный сайт
  • Мастерство Grails Онлайн-руководство из 18 частей, предоставленное IBM (с 2008 г.)

Книги

  • Rocher, Graeme Keith (2009). Полное руководство по Grails (2-е изд.). Berkeley, CA: Apress. ISBN 9781590599952.
  • Браун, Джефф; Роше, Грэм (2013). Полное руководство по Grails 2. [Нью-Йорк]: Apress. ISBN 9781430243779.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Grails_(framework)&oldid=1266053708"