Грааль (фреймворк)
![]() | Эта статья содержит контент, написанный как реклама . ( Октябрь 2010 г. ) |
![]() | |
Разработчик(и) | Грэм Роше |
---|---|
Первоначальный выпуск | Октябрь 2005 г. |
Стабильная версия | 6.1.2
/ 31 января 2024 г. |
Репозиторий | Репозиторий Грааля |
Написано в | классный |
Операционная система | Кросс-платформенный |
Платформа | Кроссплатформенность ( JVM ) |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | Грааль |
Grails — это с открытым исходным кодом платформа веб-приложений , использующая Apache Groovy. [1] : 757, §18 язык программирования (который, в свою очередь, основан на платформе Java ). Он задуман как высокопроизводительная среда, следуя парадигме « кодирования по соглашению », предоставляя автономную среду разработки и скрывая большую часть деталей конфигурации от разработчика. [ нужна ссылка ]
Grails ранее был известен как «Groovy on Rails»; в марте 2006 года это имя было исключено в ответ на запрос Дэвида Хайнемайера Ханссона , основателя платформы Ruby on Rails . [2] Работа началась в июле 2005 г., выпуск версии 0.1 состоялся 29 марта 2006 г., а выпуск версии 1.0 был анонсирован 18 февраля 2008 г.
Обзор
[ редактировать ]Grails был разработан для решения ряда задач:
- Предоставить веб-фреймворк для платформы Java.
- Повторное использование существующих технологий Java, таких как Hibernate и Spring, в едином интерфейсе.
- Предложите последовательную структуру разработки.
- Предложите документацию для ключевых частей структуры:
- Предоставьте примеры приложений, демонстрирующих структуру.
- Обеспечить полноценный режим разработки, включая веб-сервер и автоматическую перезагрузку ресурсов.
Маркетинг
[ редактировать ]У Grails есть три свойства, которые отличают его от традиционных веб-фреймворков Java:
- Нет XML конфигурации
- Готовая к использованию среда разработки
- Функциональность, доступная через миксины
Нет конфигурации XML
[ редактировать ]Создание веб-приложений на Java традиционно предполагает настройку сред и платформ в начале и во время разработки. Эта конфигурация очень часто выражается в XML-файлах, чтобы упростить настройку и избежать внедрения конфигурации в код приложения.
Изначально XML приветствовался, поскольку он обеспечивал большую согласованность настройки приложений. Однако в последние годы стало очевидно, что, хотя XML отлично подходит для настройки, настройка среды может оказаться утомительной. Это может снизить производительность, поскольку разработчики тратят время на понимание и поддержку конфигурации платформы по мере роста приложения. Добавление или изменение функциональности в приложениях, использующих конфигурацию XML, добавляет дополнительный шаг к процессу изменений, что снижает производительность и может снизить гибкость всего процесса.
Grails устраняет необходимость добавлять конфигурацию в XML-файлы. Вместо этого платформа использует набор правил или соглашений при проверке кода приложений на основе Grails. Например, имя класса, которое заканчивается на Controller
(например BookController
) считается веб-контроллером.
Готовая к использованию среда разработки
[ редактировать ]При использовании традиционных наборов веб-инструментов Java разработчикам приходится собирать модули разработки, что может быть утомительно. Grails предоставляет среду разработки, включающую веб-сервер, позволяющий разработчикам сразу приступить к работе. Все необходимые библиотеки входят в состав дистрибутива Grails, и Grails автоматически подготавливает веб-среду Java к развертыванию.
Функциональность, доступная через миксины
[ редактировать ]В Grails реализованы динамические методы в нескольких классах посредством примесей. Миксин — это метод, который динамически добавляется в класс, как если бы его функциональность была скомпилирована в программу.
Эти динамические методы позволяют разработчикам выполнять операции без необходимости реализации интерфейсов или расширения базовых классов. Grails предоставляет динамические методы в зависимости от типа класса. Например, в предметных классах есть методы для автоматизации операций сохранения, таких как сохранение, удаление и поиск.
Веб-фреймворк
[ редактировать ]Веб-фреймворк Grails был разработан в соответствии с парадигмой MVC .
Контроллеры
[ редактировать ]Grails использует контроллеры для реализации поведения веб-страниц. Ниже приведен пример контроллера:
class BookController {
def list() {
[ books: Book.list() ]
}
}
Вышеуказанный контроллер имеет list
действие, которое возвращает модель , содержащую все книги в базе данных. Чтобы создать этот контроллер, grails
используется команда, как показано ниже:
grails create-controller Book
Эта команда создает класс в grails-app/controller
каталог проекта Grails. Создание класса контроллера достаточно, чтобы Grails распознал его. list
карты действий для http://localhost:8080/book/list
в режиме разработки.
Просмотры
[ редактировать ]Grails поддерживает JSP и GSP. В приведенном ниже примере показано представление, написанное на GSP, в котором перечислены книги в модели, подготовленной контроллером выше:
<html>
<head>
<title>Our books</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
проекта Граальс. Это местоположение соответствует BookController
и list
действие. Размещение файла в этом месте достаточно, чтобы Grails распознал его.
Также доступна ссылка на тег GSP .
Библиотеки динамических тегов
[ редактировать ]Grails предоставляет большое количество библиотек тегов «из коробки». [1] : 758-763, §18-2 Однако вы также можете создавать и повторно использовать свои собственные библиотеки тегов. [1] : 792, §18-13 легко: [3]
class ApplicationTagLib {
def formatDate = { attrs, body ->
out << new java.text.SimpleDateFormat(attrs.format).format(attrs.date)
}
}
The formatDate
библиотека тегов выше форматирует a 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] Архивировано 17 октября 2010 г. в Wayback Machine.
Упорство
[ редактировать ]Модель
[ редактировать ]Модель предметной области в Grails сохраняется в базе данных с помощью GORM (реляционное сопоставление объектов Grails). Классы предметной области сохраняются в папке grails-app/domain
каталог и может быть создан с помощью grails
команда, как показано ниже:
grails create-domain-class Book
Эта команда запрашивает имя класса домена и создает соответствующий файл. Ниже приведен код Book
класс показан:
class Book {
String title
Person author
}
Создание этого класса — это все, что требуется для постоянного управления им с помощью Grails. В Grails 0.3 GORM был улучшен и, например, добавляет идентификатор свойства и саму версию в класс домена, если они отсутствуют. Свойство id используется в качестве первичного ключа соответствующей таблицы. Свойство версии используется для оптимистической блокировки.
Методы
[ редактировать ]Когда класс определяется как доменный класс, то есть управляемый GORM, методы динамически добавляются, чтобы помочь сохранить экземпляры класса. [2] Архивировано 19 октября 2010 г. в Wayback Machine.
Динамические методы экземпляра
[ редактировать ]The save()
метод сохраняет объект в базу данных:
def book = new Book(title:"The Da Vinci Code", author:Author.findByName("Dan Brown"))
book.save()
The delete()
метод удаляет объект из базы данных:
def book = Book.findByTitle("The Da Vinci Code")
book.delete()
The refresh()
метод обновляет состояние объекта из базы данных:
def book = Book.findByTitle("The Da Vinci Code")
book.refresh()
The ident()
метод извлекает идентификатор объекта, присвоенный из базы данных:
def book = Book.findByTitle("The Da Vinci Code")
def id = book.ident()
Динамические статические (классовые) методы
[ редактировать ]The count()
метод возвращает количество записей в базе данных для данного класса:
def bookCount = Book.count()
The exists()
метод возвращает true, если в базе данных существует объект с заданным идентификатором:
def bookExists = Book.exists(1)
The find()
метод возвращает первый объект из базы данных на основе оператора запроса объекта:
def book = Book.find("from Book b where b.title = ?", [ 'The Da Vinci Code' ])
Обратите внимание, что синтаксис запроса — Hibernate HQL .
The findAll()
метод возвращает все объекты, существующие в базе данных:
def books = Book.findAll()
The findAll()
метод также может принимать оператор запроса объекта для возврата списка объектов:
def books = Book.findAll("from Book")
The findBy*()
методы возвращают первый объект из базы данных, соответствующий определенному шаблону:
def book = Book.findByTitle("The Da Vinci Code")
Также:
def book = Book.findByTitleLike("%Da Vinci%")
The findAllBy*()
методы возвращают список объектов из базы данных, соответствующих определенному шаблону:
def books = Book.findAllByTitleLike("The%")
The findWhere*()
методы возвращают первый объект из базы данных, соответствующий набору именованных параметров:
def book = Book.findWhere(title:"The Da Vinci Code")
Строительные леса
[ редактировать ]Grails поддерживает формирование шаблонов для поддержки CRUD операций (создание, чтение, обновление, удаление). Любой доменный класс может быть сформирован путем создания контроллера формирования каркаса, как показано ниже:
class BookController {
static scaffold = true
}
Создав этот класс, вы можете выполнять операции CRUD на http://localhost:8080/book
. Это работает, поскольку BookController следует тому же соглашению об именах, что и доменный класс Book. Чтобы создать шаблон для определенного доменного класса, мы могли бы ссылаться на этот класс непосредственно в свойстве scaffold:
class SomeController {
static scaffold = Book
}
В настоящее время Grails не предоставляет основу для ассоциаций.
Устаревшие модели баз данных
[ редактировать ]Механизм сохранения в GORM реализован через Hibernate . Таким образом, устаревшие базы данных могут быть сопоставлены с классами GORM с использованием стандартных файлов сопоставления Hibernate .
Целевая аудитория
[ редактировать ]Целевая аудитория Grails:
- Разработчики Java или Groovy, которым нужна интегрированная среда разработки для создания веб-приложений.
- Разработчики без опыта работы с Java, которым нужна высокопроизводительная среда для создания веб-приложений. [ нужна ссылка ]
Интеграция с платформой Java
[ редактировать ]Grails построен на основе платформы Java и является ее частью, что означает, что его очень легко интегрировать с библиотеками, платформами и существующими базами кода Java. Grails предлагает прозрачную интеграцию классов, отображаемых с помощью инфраструктуры Hibernate ORM . Это означает, что существующие приложения, использующие Hibernate, могут использовать Grails без перекомпиляции кода или перенастройки классов Hibernate при использовании методов динамического сохранения, описанных выше. [3] Архивировано 16 июля 2011 г. в Wayback Machine.
Одним из последствий этого является то, что формирование шаблонов можно настроить для классов Java, отображаемых с помощью Hibernate. Другим следствием является то, что возможности веб-платформы Grails полностью доступны для этих классов и приложений, которые их используют.
Grails также использует Spring Inversion of Control Framework; На самом деле Grails — это приложение Spring MVC. [4] Фреймворк Spring можно использовать для предоставления дополнительных bean-компонентов Spring и введения их в контекст приложения. Платформа SiteMesh используется для управления уровнем представления, упрощая разработку страниц с помощью надежной системы шаблонов. [5]
Приложения Grails упаковываются как военные артефакты, которые можно развернуть в любом контейнере сервлетов или на серверах приложений Java EE . [1] : 763, §18-2
См. также
[ редактировать ]- Groovy (язык программирования)
- ДжРубин
- Griffon (фреймворк) — фреймворк рабочего стола, вдохновленный Grails.
- Спринг Роо
- Сравнение веб-фреймворков
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Deinum et al. 2014Дейнум и др. 2014
- ^ Роше, Грэм. «Groovy on Rails больше нет (вроде как)» . Архивировано из оригинала 7 мая 2010 года.
- ^ 7.3 Библиотеки тегов
- ^ «Документация Грааля» .
- ^ «Слайд-презентация» . 6 ноября 2010 г.
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Октябрь 2012 г. ) |
- Дейнум, Мартен; Рубио, Дэниел; Лонг, Джош; Мак, Гэри (1 сентября 2014 г.). Весенние рецепты: подход к решению проблем (второе изд.). Апресс . ISBN 978-1-4302-2499-0 .
- Браун, Джефф; Роше, Грэм (15 января 2009 г.), Полное руководство по Граалю (2-е изд.), Apress , стр. 648, ISBN 978-1-59059-995-2
- Смит, Глен; Ледбрук, Питер (28 июня 2009 г.), Грааль в действии (1-е изд.), Manning Publications , стр. 520, ISBN 978-1-933988-93-1
- Абдул-Джавад, Башар (2 декабря 2008 г.), Рецепты Groovy and Grails (1-е изд.), Apress , стр. 424, ISBN 978-1-4302-1600-1
- Фишер, Роберт (20 апреля 2009 г.), Сохраняемость Grails с GORM и GSQL (1-е изд.), Apress , стр. 125, ISBN 978-1-4302-1926-2 , архивировано из оригинала 16 декабря 2009 г. , получено 22 октября 2009 г.
- М. Джадд, Кристофер; Нусайрат, Джозеф Фейсал; Шинглер, Джим (18 июня 2008 г.), Начало Groovy и Grails: от новичка к профессионалу (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 г.)
Книги
[ редактировать ]- Роше, Грэм Кейт (2009). Полное руководство по Grails (2-е изд.). Беркли, Калифорния: Apress. ISBN 9781590599952 .
- Браун, Джефф; Роше, Грэм (2013). Полное руководство по Grails 2 . [Нью-Йорк]: Апресс. ISBN 9781430243779 .