0

Je travaille sur le framework Grails. Je me demande que la façon dont Grails méthode de classe de domaine sont de comptage dynamique générer pour chaque classe de domaine d'application Grails commeGrails comment les méthodes créées automatiquement/dynamiquement pour la classe de domaine?

, countBy, createCriteria, supprimer, défausse, erreurs, executeQuery, executeUpdate, existe , fetchmode, trouver, findAll, findAllBy, findAllWhere, findBy, findOrCreateBy, findOrCreateWhere, findOrSaveBy, findOrSaveWhere, findWhere, premier, obtenir, getAll, getDirtyPropertyNames, getPersistentValue, hasErrors, hasMany, hasOne, ident, instanceOf, isAttached, IsDirty, dernière, liste , listOrderBy, charge, verrouillage , fusion, lecture, rafraîchissement, enregistrer, validate, où, withCriteria, withNewSession, WithSession, withTransaction

Répondre

-1

Cela se fait par metaprogramming, vous pouvez ajouter des méthodes et des propriétés à une classe dynamique. Vous devriez utiliser cela de manière conservatrice pour éviter les collisions avec d'autres bibliothèques essayant d'ajouter la même méthode à la même classe.

Espérons que cela aide.

0

Dans Grails 3.x, aucune métaprogrammation n'est utilisée pour étendre les classes de domaine. Je pense qu'ils utilisent AST à la place

+0

"Dans Grails 3.x aucune métaprogrammation n'est utilisée pour étendre les classes de domaine." - Ce n'est pas entièrement vrai. Nous utilisons encore la métaprogrammation d'exécution pour des choses comme les trouveurs dynamiques qui ne peuvent pas être truqués au moment de la compilation. Beaucoup d'autres choses qui étaient faites avec la métaprogrammation d'exécution ont été remplacées par des solutions basées sur les traits ou des transformations AST personnalisées, mais la métaprogrammation d'exécution est toujours utilisée dans Grails 3. –

0

Dans les versions récentes de Grails, les méthodes mentionnées dans la question sont définies dans un trait que Grails ajoute automatiquement à vos classes de domaine Groovy. Voir https://github.com/grails/grails-data-mapping/blob/9c66dbfdec33311d768fc230e704150d213e87ab/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy. Par exemple, la méthode count() est définie à https://github.com/grails/grails-data-mapping/blob/9c66dbfdec33311d768fc230e704150d213e87ab/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy#L620.

J'espère que cela aide.