Не похоже, что есть слишком много бобов, но, конечно, это зависит от того, что бобы делают и как они используются. Правило «один бин на представление» довольно распространено, и обычно в этом нет ничего плохого. Конечно, если вы можете написать некоторые бины, которые являются более общими и могут использоваться во многих / всех представлениях, вы, безусловно, должны это сделать, просто старайтесь, чтобы их цель была ясной и фокусировалась на одной задаче.
Тот факт, что большинство ваших bean-компонентов имеют объем запроса, это хорошо. Только бины, которые должны сохранять некоторое состояние в течение всей продолжительности пользовательского сеанса, должны быть помещены в область сеанса (отсюда и название). Это также снижает потребление памяти за сеанс. Область применения обычно используется для bean-компонентов, которые должны быть созданы один раз и используются всеми пользователями вашего сайта. Как и глобальные переменные / синглтоны, вы должны использовать их экономно.
Но о вашей идее, что одного сессионного компонента достаточно: нет общего правила, сколько компонентов должно быть в какой области видимости. Проектируйте и разрабатывайте бобы, а затем решайте, в каком объеме они должны быть. Как я уже сказал, очень вероятно, что количество компонентов в области сеанса будет меньше количества компонентов в области запроса, но если компонент должен находиться в области сеанса для правильной работы, вам не следует его бояться.
Не пытайтесь втиснуть все в один сессионный компонент, просто потому, что вы хотите иметь только один компонент в области действия сеанса. Это можно назвать Объектом Бога , который является анти-паттерном .
Так, например, у вас есть некоторая информация о пользователе (например, полное имя, статус, роль ...), хранящаяся в базе данных, которую вы хотите отображать на всех страницах, когда пользователь вошел в систему (например, серая полоса на сверху здесь, на SO). Это было бы то, что вы могли бы реализовать как сессионный компонент, который используется на всех ваших страницах (или, что еще лучше, в некотором заголовке, который включен на каждой странице). Этот компонент будет создан, как только пользователь войдет в систему и получит информацию только один раз из базы данных.
В интернет-магазине для хранения корзины покупок пользователя может использоваться другой bean-объект сессионной области. Для управления отдельным списком покупок может быть использован еще один сессионный компонент ...
Кроме того, я хотел бы прокомментировать правила / стиль именования, которые вы и ваша команда используете:
- Вы должны выбрать один язык (предпочтительно английский) и придерживаться его, чтобы не было названий классов / методов / переменных, таких как "PasswordVergessen"
- Каждый класс / метод / переменная должен иметь описательное и самообъяснимое имя, поэтому не используйте что-то вроде «ApplicationBean1»
- Попробуйте организовать ваши лица-конфигурации в блоки (отделить правила навигации от определений бинов и т. Д.)