Я пытаюсь создать решение для тегирования, которое будет немного гибким.Ранее я думал о том, чтобы решить эту проблему следующим образом: Полиморфное принадлежит ли многим многим картографированию в граалях? .Но так как это, похоже, не приносит никаких плодов, я не шел вперед в другом направлении.
Что я сейчас пытаюсь сделать, это определить, есть ли у класса домена ссылка hasMany
на Tag
учебный класс.Если это так, то я пытаюсь назначить делегирование метода на taggableService
.
Все, что пытается сделать следующий код, - это найти указанный метод и вызвать его для текущего объекта.Однако, если он не находит его, попробуйте вызвать его вместо объекта делегата.И если все не удается, выведите исключение MissingMethodException.
for(GrailsClass c in grailsApplication.getDomainClasses()){
Map hasMany = c.getPropertyValue('hasMany')
//continue of has a many mapping with Tag class as its endpoint
if(hasMany && hasMany.containsValue(Tag)){
//replace invokeMethod with a delegate strategy
c.clazz.metaClass.invokeMethod = { String name, args ->
def metaMethod = c.clazz.metaClass.getMetaMethod(name,args)
if(metaMethod){
return metaMethod.invoke(delegate,args);
}
metaMethod = taggableService.class.metaClass.getMetaMethod(name, args)
if(metaMethod){
return metaMethod.invoke(taggableService,args);
}
throw new MissingMethodException(name,delegate.class,args)
}
}
}
Однако, похоже, это не дает желаемого эффекта.Я немного заблудился в Groovyland, кто-нибудь может мне помочь?