Как выполнить рефакторинг большого блока if else в переднем контроллере сервлета Java

В настоящее время я использую шаблон переднего контроллера для своего сервлета и использую большую структуру if-else if в методах doGet() и doPost(); однако мое приложение начинает добавлять все больше и больше функций, и в результате блоки if-else выходят из-под контроля. Мне было интересно, какие популярные стратегии для решения этого типа ситуаций (с сохранением фронт-контроллера).

Все, что я мог придумать, это использовать хэш-таблицу, которая сопоставляет пути (из URL-адреса запроса) вспомогательным методам, которые определяют соответствующий JSP (и задают атрибуты).

Мне понравился вид фреймворка Spring; однако в настоящее время я не могу выполнить перенос на фреймворк, как что-то вроде Spring позволяет избежать проблемы, с которой я столкнулся?


person Ashley Talbert    schedule 11.09.2013    source источник
comment
см. stackoverflow.com/questions/2060128/java-front-controller   -  person Punit Patel    schedule 11.09.2013


Ответы (2)


Независимо от фреймворка или технологии, я несколько раз сталкивался с вашим случаем, и я всегда использую шаблон команды:

https://en.wikipedia.org/wiki/Command_pattern

а в обработчике команд я использую шаблон Factory, который создает экземпляр соответствующего класса для обработки запроса с информацией об объекте команды.

С этой архитектурой вы очень гибки, и ее довольно легко реализовать :)

person Rafa    schedule 11.09.2013
comment
Собираемся сделать это для школьного проекта ..... спасибо .... учитель заставляет нас делать вложенные if и все остальное .... последний проект он дал нам свободу делать то, что мы хотим ... - person Grim; 06.12.2016

Используйте Заменить условное на команду "шаблон" рефакторинга, описанный в разделе "Рефакторинг до шаблонов".

Вместо

if(conditionA){
  //...
}else if(conditionB){
  //...
}
 ...

Do :

Handler handler = LookupHandlerBy(condition);
handler.execute();
person dkatzel    schedule 11.09.2013