Рефакторинг: обходные пути сквозных проблем
Есть ли обходной путь для реализации сквозных задач, не вдаваясь в аспекты и точечные разрезы и др.?
Мы находимся в Spring MVC и работаем над бизнес-приложением, в котором невозможно позаботиться об аспектах AspectJ или Spring по разным причинам.
И некоторые из наших контроллеров стали сильно раздутыми (слишком сильно), с тоннами несфокусированного кода.
Каждый раз, когда я сажусь на рефакторинг, я вижу, что одни и те же вещи делаются снова и снова. Позвольте мне объяснить:
Каждый раз, когда мне нужно подготовить представление, я добавляю в него список стран для пользовательского интерфейса. (Объект добавлен в ModelAndView). Этот список вытащен из БД в ehCache.
Вначале было ужасно, когда я пытался добавить списки INLINE во все меню. Вместо этого я подготовил функцию, которая будет обрабатывать каждый ModelAndView. Как? ну, с большим количеством мусорных обращений к функции!
И я выкупил одну беду за другую.
Какой шаблон дизайна / трюк может мне помочь? Мне надоело вызывать функции, чтобы добавлять вещи в мой ModelAndView, и с более чем 3500 строками только кода контроллера я схожу с ума, находя все точки соприкосновения, где что-то пропало!
Предложения приветствуются. Сквозная нарезка касается аромата без AspectJ или Spring native.
1 ответ
Поскольку вы используете Java, вы можете подумать о переносе своего кода в Scala, поскольку он хорошо взаимодействует с Java, поэтому вы можете использовать черты, чтобы получить желаемую функциональность.
К сожалению, сквозная интеграция - это проблема с ООП, поэтому переход к функциональному программированию может быть решением, но я ожидаю, что на самом деле они используют AOP для реализации этих миксов, так что это все равно будет AOP, просто абстрагированный.
Другой вариант - посмотреть на редизайн вашего приложения и убедиться, что у вас нет дублирующегося кода, но серьезный рефакторинг очень труден и сопряжен с риском.
Но, например, у вас может получиться, что ваш ModelAndView вызовет несколько статических служебных классов, чтобы получить необходимые ему данные, или действительно обеспечит, например, правильную роль пользователя.
Возможно, вы захотите взглянуть на книгу "Рефакторинг к шаблонам" ( http://www.industriallogic.com/xp/refactoring/), чтобы найти некоторые идеи.