Grails 3.3.3 generate-all ‹класс предметной области› Создает только интерфейс службы

В Grails 3.3.3, когда я запускаю generate-all для доменного класса, создается сервисный интерфейс (а не фактический сервисный класс из Grails 2.x). На самом деле я не замечал этого, пока не попытался добавить метод в свой сервис.

Интерфейс помещается в папку сервисов, где будет жить сервис. Мне на самом деле нравится интерфейс, но я все еще хочу сервис и реализации по умолчанию. Как я могу разместить и интерфейс, и реализацию в папке сервисов, если в интерфейсе уже есть имя сервиса? (Например, интерфейс получает имя ClientService.groovy, поэтому реализация будет иметь такое же имя)

Вот пример сгенерированного интерфейса

package project

import grails.gorm.services.Service

@Service(Client)
interface ClientService {

    Client get(Serializable id)

    List<Client> list(Map args)

    Long count()

    void delete(Serializable id)

    Client save(Client client)

}

person Bmoe    schedule 16.03.2018    source источник


Ответы (1)


Как я могу разместить и интерфейс, и реализацию в папке сервисов, если в интерфейсе уже есть имя сервиса?

Если у вас есть интерфейс, отмеченный @Service, у вас вообще не должно быть исходного файла реализации. GORM Data Services создает реализацию для вас во время компиляции. Если вы хотите написать часть кода самостоятельно, то вместо интерфейса напишите абстрактный класс и аннотируйте его с помощью @Service. У вас нет причин иметь интерфейс, отмеченный @Service, а затем писать класс, который реализует этот интерфейс.

person Jeff Scott Brown    schedule 16.03.2018
comment
Интерфейсы, абстракции и конкретные классы тоже могут быть красивыми. Является ли ваше предложение подходом Groovy и/или Grails? - person Koffy; 17.03.2018
comment
Является ли ваше предложение подходом Groovy и/или Grails? - Я не предлагал. Я описал, как GORM обрабатывает аннотацию @grails.gorm.services.Service. - person Jeff Scott Brown; 19.03.2018