Question

J'utilise un framework MVC qui ressemble un peu à struts. Alors, disons que j'ai un " Edit Store " lien dans mon application c'est à quoi l'url ressemblerait:

http: // localhost: 9080 / test? action = editStore & amp; storeNum = 10

Maintenant, l'action détermine mon action (analogue à l'action Struts) à exécuter. L'action correspondante ici est: EditStoreAction. Un clic sur cette option ouvrirait une fenêtre contextuelle avec différents attributs d’un magasin à modifier.

Ma question est la suivante: Comment puis-je écrire mes actions? Est-ce que j'écris deux actions dans ce contexte?

  1. EditStoreAction qui rendra edit.jsp
  2. StoreSaveAction qui     sera invoqué lorsque l'utilisateur appuiera sur     accepter la réponse rendue de     edit.jsp.

OU Dois-je simplement écrire une action? EditStoreAction et soumettre le formulaire à la même action, je saurais que l'utilisateur a appuyé sur le bouton d'acceptation des modifications lors de la soumission. Ainsi, j'exécuterais un flux différent dans l'Action, ce qui permettrait de sauvegarder les mises à jour de la base de données et de les rediriger vers une page diff.

Quelle est la meilleure pratique ici? Créer autant d'actions que possible parce que le code reste modulaire? OU écrivez simplement une action pour gérer tout dans un jsp?

Je sais que cette question semble un peu triviale, cependant, parfois, vous voulez juste que tout soit correct. D'où la question. Appréciez votre aide.

Était-ce utile?

La solution

L’idée est, comme Spring MVC, de mapper vos actions sur les méthodes d’une classe spécifique, par exemple, contrôleur.

Ainsi, dans votre cas, ces deux actions seront mappées sur deux méthodes différentes de la même classe. Vous pouvez appeler la classe StoreFormController et deux méthodes, editStore () et saveStore () .

Encore mieux si vous créez deux contrôleurs pour chaque entité. Peut-être une pour toutes les requêtes GET et une autre pour les requêtes POST. Ainsi, dans votre cas, il y aurait deux contrôleurs StoreController pour toutes les autres demandes et StoreFormController pour toutes les soumissions de formulaire, à savoir les demandes de publication. Maintenant, votre première action étant GET ira à la méthode editStore () de StoreController , tandis que la seconde requête étant une requête POST ira à saveStore () méthode de StoreFormController . Vous pouvez définir autant de méthodes que nécessaire dans l'une de ces deux classes en fonction du type de requête.

Vous pouvez facilement voir d'où je viens si vous connaissez Spring MVC API.

Autres conseils

J'aime utiliser la classe struts DispatchAction car je pouvais définir plusieurs méthodes dans la classe d'action (la méthode "execute"). Derrière le capot, tout ce qu’il fait est de trouver la méthode qu’il doit exécuter (soumise sous la forme ou passée dans l’URL), de rechercher la méthode en utilisant la réflexion, de l’appeler avec le bon ensemble d’arguments (la méthode doit avoir le même signature de la méthode "execute"), obtient le résultat et le transmet. DispatchAction remplace simplement le paramètre " execute " Méthode de la classe Action pour implémenter ce comportement.

Cela étant dit, dans votre cas, je définirais une seule classe - disons "DispatchStoreAction" et je définirais deux méthodes, probablement "préparer". et "sauvegarder". J'aime le faire de cette façon car j'ai toujours une bonne abstraction de classe (et vous ne mettez pas "l'action" que vous exécutez dans le nom de la classe), car vos méthodes peuvent clairement identifier ce qu'elles sont censées faire, et aussi parce que, par définition, les classes d'action ont tendance à être petites. Vous aurez probablement un " StoreLogic " ou " StoreBusiness " définie quelque part, et cette classe gérera la logique métier liée à l'entité sur laquelle vous travaillez. Personnellement, j’estime que c’est bien si vous avez un & Store; Action Store " et ensuite un "StoreLogic", un "UserAction". et un " UserLogic " Et ainsi de suite, la relation n'a pas besoin d'être de 1 à 1, mais je pense que cela aide à maintenir le code.

Recherchez dans le code source de la classe DispatchAction des idées sur la façon de procéder, mais sa mise en œuvre doit être simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top