stringtranslate.com

Грааль (фреймворк)

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 был разработан для решения ряда задач:

Маркетинг

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

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

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

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

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

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

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

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

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

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

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

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

Контроллеры

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

класс BookController { def list () { [ books: Book . список () ] } }          

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

Книга Grails Create-Controller

Эта команда создает класс в 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 предоставляет большое количество библиотек тегов «из коробки». [1] : 758-763, §18-2  Однако вы также можете легко создавать и повторно использовать свои собственные библиотеки тегов [1] : 792, §18-13  : [3]

класс ApplicationTagLib { def formatDate = { attrs , body -> out << new java . текст . SimpleDateFormat ( attrs . format ). формат ( attrs.date ) } } _ _              

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

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

<g:formatDate format="ггггММдд" date="${myDate}"/>

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

Упорство

Модель

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

Книга Grails Create-Domain-Class

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

class Book { String title Человек автор }      

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

Методы

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

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

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

def book = новая книга ( название: «Код да Винчи» , автор: Author . findByName ( «Дэн Браун» )) book . сохранять ()     

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

Защитная книга = Книга . Книга findByTitle ( «Код да Винчи» ) . удалить ()   

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

Защитная книга = Книга . Книга findByTitle ( «Код да Винчи» ) . обновить ()   

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

Защитная книга = Книга . findByTitle ( «Код да Винчи» ) def id = book . идентификатор ()      

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

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

защита bookCount = Книга . считать ()   

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

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

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

Защитная книга = Книга . find ( "из Книги b, где b.title =?" , [ 'Код да Винчи' ])      

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

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

def book = Книга . найти все ()   

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

def book = Книга . findAll ( «из книги» )   

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

Защитная книга = Книга . findByTitle ( «Код да Винчи» )   

Также:

Защитная книга = Книга . findByTitleLike ( "%Да Винчи%" )   

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

def book = Книга . findAllByTitleLike ( «%» )   

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

Защитная книга = Книга . findWhere ( название: «Код да Винчи» )   

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

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

класс BookController { статический каркас = true }      

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

класс SomeController { статический каркас = Книга }      

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

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

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

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

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

Интеграция с платформой 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 

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

Рекомендации

  1. ^ abcd Deinum et al. 2014.
  2. ^ Роше, Грэм. «Groovy on Rails больше нет (вроде как)». Архивировано из оригинала 7 мая 2010 года.
  3. ^ 7.3 Библиотеки тегов
  4. ^ "Документация Grails" .
  5. ^ "Слайд-презентация" . 6 ноября 2010 г.

Внешние ссылки

Книги