Domanda

Sto usando un framework MVC che è un po 'come uno strut. Quindi, supponiamo di avere un " Modifica negozio " link nella mia applicazione, ecco come apparirà l'URL:

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

Ora, action determina la mia Action (analoga a Struts Action) da eseguire. L'azione corrispondente qui è: EditStoreAction. Facendo clic su questo si aprirà un pop-up con diversi attributi di un negozio per la modifica.

La mia domanda qui è: Come scrivo le mie azioni? Scrivo due azioni in questo contesto?

  1. EditStoreAction che verrà visualizzato edit.jsp
  2. StoreSaveAction che     verrà invocato quando l'utente preme     accetta la risposta resa di     edit.jsp.

O scrivo solo un'azione? EditStoreAction e invia il modulo alla stessa azione, vorrei sapere che l'utente ha premuto il pulsante Accetta per le modifiche al momento dell'invio. Quindi, eseguivo un flusso diverso nell'Azione, che salverebbe gli aggiornamenti al database e reindirizzerebbe a una pagina diff.

Qual è la migliore pratica qui? Creare quante più azioni possibili perché mantiene il codice modulare? O semplicemente scrivere un'azione per gestire tutto in un jsp?

So che questa domanda sembra un po 'banale, tuttavia a volte vuoi solo fare tutto bene. Da qui la domanda. Apprezzo il tuo aiuto.

È stato utile?

Soluzione

L'idea è, simile a Spring MVC, di mappare le tue azioni ai metodi di una classe specifica, diciamo controller.

Quindi, nel tuo caso, queste due azioni saranno mappate su due diversi metodi della stessa classe. Puoi chiamare la classe StoreFormController e due metodi, editStore () e saveStore () .

Meglio ancora se crei due controller per ogni entità. Può essere uno per tutte le richieste GET e un altro per le richieste POST. Quindi, nel tuo caso ci sarebbero due controller StoreController per tutte le altre richieste e StoreFormController per tutti gli invii di moduli, vale a dire le richieste di post. Ora, la tua prima azione essendo GET andrà al metodo editStore () di StoreController , mentre la seconda richiesta POST andrà a saveStore () metodo di StoreFormController . Puoi definire tutti i metodi necessari in ognuna di queste due classi in base al tipo di richiesta.

Puoi facilmente vedere da dove vengo, se conosci l'API Spring MVC.

Altri suggerimenti

Mi piace usare la classe DispatchAction di struts perché potrei definire più di un metodo nel metodo della classe di azioni (il metodo " execute "). Dietro il cofano, tutto ciò che fa è trovare il metodo che deve eseguire (inviato nel modulo o passato nell'URL), trovare il metodo usando la riflessione, invocarlo con il giusto set di argomenti (il metodo deve avere lo stesso firma del metodo "eseguire", ottenere il risultato e trasmetterlo. DispatchAction sostituisce semplicemente " esegui " metodo della classe Action per implementare quel comportamento.

Detto questo, nel tuo caso, definirei solo una classe - diciamo "DispatchStoreAction", e definirei due metodi, probabilmente "prepari" e "salva". Mi piace farlo in questo modo perché ho ancora una buona astrazione di classe (e tu non metti "azione" che stai eseguendo nel nome della classe), perché i tuoi metodi possono identificare chiaramente ciò che dovrebbero fare, e anche perché, per definizione, le classi di azione tendono ad essere piccole. Probabilmente avrai un " StoreLogic " o " StoreBusiness " definito da qualche parte, e questa classe gestirà la logica aziendale relativa all'entità su cui stai lavorando. Personalmente penso che sia bello se ne hai uno " StoreAction " e poi uno " StoreLogic " ;, uno " UserAction " e uno " UserLogic " e così via - la relazione non deve necessariamente essere 1 a 1 ma penso che aiuti a mantenere il codice.

Controlla il codice sorgente della classe DispatchAction per idee su come farlo, ma l'implementazione dovrebbe essere banale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top