Grails (framework)

редактировать
Фреймворк веб-приложений с открытым исходным кодом
Grails
Grails logo.png
Разработчик (и)
Первоначальный выпускОктябрь 2005 г.
Стабильная версия 4.0.2 / 21 февраля 2020 г.; 8 месяцев назад (21.02.2020)
Репозиторий Репозиторий Grails
Написано наGroovy
Операционная система Кросс-платформенность
Платформа Кросс-платформенность (JVM )
Тип Платформа веб-приложений
Лицензия Лицензия Apache 2.0
Веб-сайтgrails.org

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

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

Содержание
  • 1 Обзор
  • 2 Высокая производительность
    • 2.1 Отсутствие конфигурации XML
    • 2.2 Готовая к использованию среда разработки
    • 2.3 Функциональность, доступная через миксины
  • 3 Веб-фреймворк
    • 3.1 Контроллеры
    • 3.2 Представления
    • 3.3 Библиотеки динамических тегов
  • 4 Постоянство
    • 4.1 Модель
    • 4.2 Методы
      • 4.2.1 Методы динамического экземпляра
      • 4.2.2 Динамические Статические методы (класс)
    • 4.3 Создание каркаса
    • 4.4 Устаревшие модели баз данных
  • 5 Целевая аудитория
  • 6 Интеграция с платформой Java
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки
Обзор

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

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

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

Нет конфигурации 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, в котором перечислены книги в модели, подготовленной указанным выше контроллером:

Наши книги
  • $ {it.title} ($ {it.author.name})

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

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

Библиотеки динамических тегов

Grails предоставляет большое количество готовых решений. Однако вы также можете легко создавать и повторно использовать свои собственные библиотеки тегов:

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:

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

Сохранение

Модель

Модель предметной области в 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]

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

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

def book = new Book (название: "The Da Код Винчи », автор: Author.findByName (« Дэн Браун »)) book.save ()

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

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

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

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

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

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

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

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

def bookCount = Book.count ()

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

def bookExists = Book.exists (1)

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

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

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

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

def books = Book.findAll ()

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

def books = Book.findAll ("from Book")

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

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

Также:

def book = Book. findByTitleLike ("% Da Vinci%")

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

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

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

def book = Book.findWhere (заголовок: «Код да Винчи»)

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

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

class BookController {static scaffold = true}

Создав этот класс, вы можете выполнять операции CRUD на http: // localhost: 8080 / книга. Это работает, потому что 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]

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

Grails также использует структуру Spring Inversion of Control Framework; На самом деле Grails - это скрытое приложение Spring MVC. Инфраструктуру Spring можно использовать для предоставления дополнительных компонентов Spring и внедрения их в контекст приложения. Платформа SiteMesh используется для управления уровнем представления, упрощая разработку страниц с помощью надежной системы шаблонов.

Приложения Grails упакованы как военные артефакты, которые можно развернуть в любом контейнере сервлетов или Серверы приложений Java EE.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-22 04:18:32
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте