2013-02-17 2 views
3

Исследование использования наследования в Spring MVC.Использование наследования в Spring MVC 3.1

Это хорошая идея иметь базовый контроллер, который могут расширить другие контроллеры?

Базовый контроллер будет проводить общие функции для всех controllers.For Например, получения дескриптора вошедшего в системе пользователя и т.д.

При использовании базового контроллера не является хорошей идеей, есть какие-либо другие предложения на реализуйте что-то вроде того, что я упомянул выше.

ответ

2

Совершенно допустимо иметь базовый контроллер, который могут распространяться другие контроллеры. Когда Spring представила аннотации @Controller, они проложили вам путь к использованию любой иерархии классов, которую вы хотите.

Просто имейте в виду, что в качестве объектно-ориентированного принципа дизайна полезно поддерживать состав над наследованием. Как правило (не жесткое и быстрое правило) я бы рекомендовал переместить общий код контроллера в класс, интерфейс которого может быть введен в ваши контроллеры через @Inject or @Autowired.

Еще одно предложение для получения дескриптора зарегистрированного пользователя - это немного больше работы, но очень приятно, когда оно у вас есть. См. Обсуждение здесь об использовании current user annotation on your controller method arguments. Это то, что я делаю в своем проекте, и он отлично работает!

+0

Спасибо за ваши данные Jay.But, если бы я использовал композицию с общим кодом в одном классе, мне все равно нужно было бы вводить это в каждый контроллер. Я буду смотреть на ссылки, которыми вы поделились. Если вы думаете о каких-либо других идеях сделайте пожалуйста. – souser

+1

Вы должны рассмотреть свои варианты и применить принципы проектирования к своей собственной ситуации. Если у вас много контроллеров, возможно, имеет смысл использовать наследование. – Jay

+1

Еще одна мысль, если вы идете по пути наследования, состоит в том, чтобы сохранить унаследованный метод (ы) нефинал, чтобы вы могли переопределить его в модульных тестах (скажем, чтобы вернуть макет пользовательского объекта вместо вызова статических методов защиты). Это облегчит модульное тестирование без использования инъекции зависимостей. – Jay