Почти сразу после начала разработки сайта (в моём случае на Spring MVC) я заметил, что адрес конкретной страницы приходится использовать во многих местах моего приложения.
Во-первых, в самом контроллере, при задании mapping-а:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
И, если не аннотировать весь класс, снова, но уже для метода POST:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Во-вторых, во view, чтобы задать URL на который будут отправлены данные из формы (хотя в данном случае action можно не указывать):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
В-третьих, на страницах тоже решил отобразить ссылку для добавления серии:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
В-четверых, я же ещё и интеграционные тесты пишу на WebDriver-е и ему надо знать какую страницу открывать:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Как видите, мне встретилось четыре места, где URL страницы необходимо указать. Возможно, что ваш список будет меньше или, напротив, больше. Так или иначе я решил, что принцип "Не повторяйся" (Don't Repeat Yourself, DRY) можно применить и к адресу страницы. Тогда-то и пришла идея создать специальный класс, в котором можно было бы собрать адреса всех страниц сайта. Теперь, при переименовании страницы внести изменения нужно будет лишь в один файл.
Сначала, я назвал класс SiteMap. Название хоть и отражало суть, но оказалось довольно длинным и громоздким, поэтому я переименовал его в Url:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Использование одного Java класса в других, разумеется, тривиально:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Немного сложнее было «пробросить» эту константу в JSP файлы, но и это не проблема:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Вот вроде бы и всё. Ан нет, всё просто только в книжках да статьях, в жизни немного иначе: да, теперь хотя бы в Java/JSP коде я устранил дублирование, но что делать с XML файлами и другими конфигами? Например, при ограничении доступа к странице с помощью Spring Security:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
А что если вы возвращаете путь к JSP файлу из контроллера?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Или в tiles.xml для указания пути адреса и пути к JSP файлу:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Я пока оставил это как есть, хотя варианты существуют:
универсальный: вынести константы в properties файл, и фильтровать ресурсы при сборке, с помощью maven-resources-plugin
только для вышеприведенного варианта с возвращаением пути к JSP файлу: в Spring-а можно использовать соглашение об именовании — если метод возвращает void, то Spring пытается использовать адрес из mapping в качестве пути к view.
в Tiles есть возможность уменьшить дублирование с помощью соглашений и регулярных выражений (но у меня, сходу, не завелось)
Некоторое время я думал, что этим никто кроме меня не заморачивается и поэтому был удивлен, когда выйдя на новую работу обнаружил в коде знакомый мне класс Url :)
Комментариев нет:
Отправить комментарий