Java: Отправка форм в MVC: Какова лучшая практика? - PullRequest
0 голосов
/ 18 июня 2009

Я использую MVC Framework, который немного похож на Struts. Итак, скажем, у меня есть ссылка «Изменить магазин» в моем приложении, вот как будет выглядеть URL:

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

Теперь действие определяет мое действие (аналогичное действию Struts) для запуска. Соответствующее действие здесь: EditStoreAction. Нажатие на это откроет всплывающее окно с различными атрибутами магазина для редактирования.

Мой вопрос здесь: Как мне написать свои действия? Я пишу два действия в этом контексте?

  1. EditStoreAction, который будет отображать edit.jsp
  2. StoreSaveAction, который будет вызвано, когда пользователь нажимает принять по предоставленному ответу edit.jsp.

ИЛИ Я просто пишу одно действие? EditStoreAction и отправить форму на одно и то же действие, я бы знал, что пользователь нажал кнопку «Принять» для внесения изменений при отправке. Таким образом, я выполняю другой поток в действии, который будет сохранять обновления в базе данных и перенаправлять на страницу сравнения.

Какая самая лучшая практика здесь? Создать как можно больше действий, потому что он сохраняет код модульным? ИЛИ просто написать одно действие для обработки всего в JSP?

Я знаю, что этот вопрос звучит несколько тривиально, однако иногда вы просто хотите все сделать правильно. Отсюда и вопрос. Ценю вашу помощь.

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Идея состоит в том, чтобы, подобно Spring MVC, отобразить ваши действия на методы определенного класса, скажем, контроллера.

Итак, в вашем случае эти два действия будут отображены на два разных метода одного и того же класса. Вы можете вызвать класс StoreFormController и два метода, editStore() и saveStore().

Еще лучше, если вы создадите два контроллера для каждой сущности. Может быть один для всех запросов GET, а другой для запросов POST. Таким образом, в вашем случае будет два контроллера StoreController для всех других запросов и StoreFormController для всех отправлений формы, а именно, для отправки запросов. Теперь ваше первое действие GET перейдет к editStore() методу StoreController, тогда как второе POST-запрос перейдет к saveStore() методу StoreFormController. Вы можете определить столько методов, сколько необходимо в любом из этих двух классов в зависимости от типа запроса.

Вы можете легко увидеть, откуда я, если вы знаете Spring MVC API.

1 голос
/ 18 июня 2009

Мне нравится использовать класс Struts DispatchAction, потому что я могу определить более одного метода в классе действия (метод execute). За кулисами все, что он делает, - это находит метод, который он должен выполнить (передается в форме или передается в URL), находит метод с использованием отражения, вызывает его с правильным набором аргументов (метод должен иметь то же самое подпись метода «execute»), получает результат и передает его. DispatchAction просто переопределяет метод execute класса Action для реализации этого поведения.

При этом в вашем случае я бы определил только один класс - скажем, «DispatchStoreAction», и я бы определил два метода, вероятно, «подготовить» и «сохранить». Мне нравится делать это таким образом, потому что у меня все еще есть хорошая абстракция класса (и вы не помещаете «действие», которое вы выполняете в имя класса), потому что ваши методы могут четко определить, что они должны делать, а также потому что, по определению, классы действий имеют тенденцию быть маленькими. Вероятно, у вас где-то будет определен «StoreLogic» или «StoreBusiness», и этот класс будет обрабатывать бизнес-логику, связанную с сущностью, над которой вы работаете. Лично я думаю, что было бы хорошо, если у вас есть один «StoreAction», а затем один «StoreLogic», один «UserAction» и один «UserLogic» и т. Д. - отношения не должны быть 1 к 1, но я думаю, что это помогает поддерживать код.

Проверьте исходный код класса DispatchAction, чтобы узнать, как это сделать, но реализация должна быть тривиальной.

...