Java: Отправка форм в MVC: Какова лучшая практика?
-
06-07-2019 - |
Вопрос
Я использую MVC-фреймворк, который немного похож на Struts. Итак, скажем, у меня есть "Редактировать магазин" ссылка в моем приложении, вот как будет выглядеть URL:
Решение
Идея состоит в том, чтобы, подобно Spring MVC, отобразить ваши действия на методы определенного класса, скажем, контроллера.
Итак, в вашем случае эти два действия будут сопоставлены двум разным методам одного и того же класса. Вы можете вызвать класс StoreFormController
и два метода: editStore ()
и saveStore ()
. Р>
Еще лучше, если вы создадите два контроллера для каждой сущности. Может быть один для всех запросов GET, а другой для запросов POST. Таким образом, в вашем случае было бы два контроллера StoreController
для всех других запросов и StoreFormController
для всех отправленных форм, а именно почтовых запросов. Теперь ваше первое действие GET перейдет к методу editStore ()
StoreController
, тогда как второе POST-запрос перейдет к saveStore ()
метод StoreFormController
. Вы можете определить столько методов, сколько необходимо в любом из этих двух классов в зависимости от типа запроса.
Вы можете легко увидеть, откуда я, если знаете API Spring MVC.
Другие советы
Мне нравится использовать класс Struts DispatchAction, поскольку я могу определить более одного метода в классе действия (метод " execute "). За кулисами все, что он делает, - это находит метод, который он должен выполнить (передается в форме или передается в URL), находит метод с использованием отражения, вызывает его с правильным набором аргументов (метод должен иметь то же самое подпись метода «execute», получает результат и передает его. DispatchAction просто переопределяет «выполнить» метод класса Action для реализации этого поведения.
При этом в вашем случае я бы определил только один класс - скажем, «DispatchStoreAction», и я бы определил два метода, вероятно, «подготовить». и " сохранить " ;. Мне нравится делать это таким образом, потому что у меня все еще есть хорошая абстракция класса (и вы не ставите «действие», вы выполняете в имени класса), потому что ваши методы могут четко определить, что они должны делать, и также потому что, по определению, классы действия имеют тенденцию быть маленькими У вас, вероятно, будет «StoreLogic» или " StoreBusiness " где-то определен, и этот класс будет обрабатывать бизнес-логику, связанную с сущностью, над которой вы работаете. Лично я думаю, что было бы хорошо, если у вас есть одна «StoreAction» а затем один «StoreLogic», один «UserAction» и один «UserLogic» и так далее - отношения не должны быть 1 к 1, но я думаю, что это помогает поддерживать код.
Проверьте исходный код класса DispatchAction, чтобы узнать, как это сделать, но реализация должна быть тривиальной.