Grails: Как написать черты для доменных классов? - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы написать черту, которой поделились бы несколько классов домена.Например, у меня есть два класса домена как таковых

class Comment{

   String description

   static hasMany = [replies: CommentReply]

   String getFormattedDescription(){
        // ...
         return formattedDescription
   }
}

class CommentReply{
   String description

   Comment comment

   String getFormattedDescription(){
        // ...
         return formattedDescription
   }
}

. В этом случае и Comment, и CommentReply имеют одинаковую функцию getFormattedDescription (), которая может быть перемещена в признак и реализована двумя классами доменов.Как мне этого добиться?

Как написать черты, которые будут реализованы во всех классах домена?Например, GormEntity реализован во всех доменах по умолчанию.

1 Ответ

0 голосов
/ 20 февраля 2019

Один из способов сделать это - написать черту и пометить ее @Enhances('Domain').

import grails.artefact.Enhances

@Enhances('Domain')
trait YourTraitName {
    // ...
}

, которая добавит YourTraitName ко всем классам домена.

Для того, чтобы это работало, вам нужно настроить черту, которая будет скомпилирована в свой собственный исходный набор перед кодом вашего приложения.Распространенный способ справиться с этим - использовать черту в плагине (который может быть частью многопроектной сборки).

...