Ответ 1
Структура каталогов в основном используется всеми приложениями, потому что артефакты определяются в основном их корневой папкой. Названия классов контроллеров заканчиваются на "Контроллер", а теги и службы имеют аналогичные соглашения об именах, но классы домена не имеют ограничений по имени. Таким образом, это место под grails-app/domain, которое определяет класс groovy как класс домена.
Grails позволяет приложениям и плагинам определять дополнительные типы артефактов, а также то, что вы видите в папке "jobs". Это создано плагином Quartz. Я делаю что-то подобное в плагине динамических контроллеров, где я добавляю новую папку controllerMixins в grails-app, где хранятся классы контроллера mixin.
Преимущество создания нового артефакта, а не хранения кода под src/ groovy заключается в том, что он просто поддерживает перезагрузку в режиме разработки, и он группирует код логически, а не сбрасывает все в одну папку (src/groovy) и полагаться на пакеты, чтобы держать вещи раздельными. У вас также есть быстрый доступ ко всем артефактам любого типа. application.getDomainClasses()
возвращает все классы домена, но метод динамически разрешен, поэтому, если у вас установлен Quartz, вы автоматически получаете поддержку application.getJobClasses()
без необходимости регистрировать или настраивать что-либо помимо стандартной регистрации артефактов.