Existe-t-il une prise en charge de l'utilisation d'objets de commande abstraits dans les paramètres d'action du contrôleur? Ensuite, selon les paramètres donnés dans une requête JSON, il sélectionnerait l'objet de commande correct?Action de commande abstraite Grails Objet de commande Commande
Par exemple quelque chose comme:
class SomeController {
def someAction(BaseCommand cmd){
// cmd could be instance of ChildCommandOne or ChildCommandTwo
}
class BaseCommand {
String paramOne
}
class ChildCommandOne extends BaseCommand {
String paramTwo
}
class ChildCommandTwo extends BaseCommand {
String paramThree
}
}
A partir de maintenant, je me sers request.JSON
pour détecter le passé dans les paramètres et instancier l'objet correct de commande. Est-ce ma seule option pour gérer ce genre de cas?
EDIT:
Pour clarifier le cas d'utilisation ici. J'ai deux modèles de domaine qui partagent le même modèle de domaine de classe de base et je modélise l'héritage dans la base de données en utilisant le modèle table-per-hierarchy
par défaut.
Dans mon cas, l'un des modèles de domaine enfant Model A
nécessite une chaîne non annulable appelée body
, qui est une entrée de texte, tandis que l'autre Model B
nécessite une chaîne non annulable appelé directUrl
. Ceux-ci représentent les annonces qui peuvent être faites sur la plate-forme. Model A
étant une écriture dans l'entrée qui contient le corps de l'annonce tandis que Model B
représente un lien vers un site tiers qui contient l'annonce réelle.
Dans ce genre de scénarios, j'ai toujours mis une instruction if dans l'action du contrôleur qui détermine l'objet de commande associé à instancier, mais j'espère une méthode plus propre.
Eh bien, je ne pense pas que c'est une bonne approche, si vous avez 3 commandes différentes, pourquoi ne pas créer u 3 actions différentes? Peut-être que ce serait plus facile si vous expliquiez votre cas d'utilisation. – rgrebski
@rgrebski J'ai mis à jour la question pour contenir mon cas d'utilisation réel. De plus, comment distinguer les 3 actions sans avoir à déclarer formellement des points de terminaison séparés dans mes mappages url? – dvisco