В чем разница между полностью статическими методами и применением одноэлементного шаблона? - PullRequest
7 голосов
/ 06 января 2011

Я создаю базу данных для хранения информации о пользователях моего веб-сайта (я использую stuts2 и, следовательно, технологию Java EE).Для базы данных я буду делать DBManager.Должен ли я применить шаблон синглтона здесь или, вернее, сделать все его методы статическими?

Я буду использовать этот DBManager для базовых вещей, таких как добавление, удаление и обновление профилей пользователей.Наряду с этим, я буду использовать для всех других целей запросов, например, чтобы выяснить, существует ли уже имя пользователя и собрать всех пользователей в административных целях и тому подобное.

Мои вопросы

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

regards

shahensha

PS База данных больше этой,Здесь я говорю только о таблицах, которые я буду использовать для хранения информации о пользователе.

Ответы [ 3 ]

8 голосов
/ 06 января 2011

Должен ли я применить здесь шаблон синглтона или, вернее, сделать все его методы статическими?

Ни то, ни другое. Просто создайте один .

В простом сервлет-контейнере вы можете использовать ServletContextListener для этого. Во время запуска веб-приложения создайте его и поместите в область приложения с помощью ServletContext#setAttribute(). Он будет доступен всем сервлетам при жизни веб-приложения. В качестве базового примера запуска вы можете найти эту статью полезной.

1 голос
/ 06 января 2011

Не большая практическая разница, но в некотором смысле философская разница.

Я бы порекомендовал здесь одноэлементный подход - вы действительно описываете тип объекта доступа к данным (DAO), хотя и на высоком уровне.

Некоторые мысли о том, почему:

  • Фабричный подход к созданию самого DBManager (т. Е. DBManagerFactory) упростит модульное тестирование; он поддается модели внедрения зависимостей.

  • Обычно предполагается, что класс с набором статических методов является классом типа switchblade / utility без общей темы (т. Е. Независимости между методами). Подумайте о классе, подобном StringUtils - люди предполагают, что у него нет общего состояния.

  • На уровне мастерства, используя подход «все статические методы», вы создаете много работы для себя, в которой вам нужно постоянно вводить статические значения для каждого метода. Опять же, вы можете просто иметь DBManagerFactory, который просто имеет один статический метод для создания DBManager, который в конечном итоге становится одиночным.

1 голос
/ 06 января 2011

Я не знаю внутренностей EE, но обычно различие между статическим классом и синглтоном заключается в создании экземпляра - в статическом классе нет фактического создания экземпляра, нет данных члена, нет ссылки на объект.Таким образом, практическая разница ... невелика.

Я думаю, что реальная выгода здесь заключается в концептуальном ... статические методы и свойства - это методы, которые применяются к абстрактной концепции класса, а не к конкретному экземпляру.,Если вы создадите здесь одиночный пользовательский объект, кто этот пользователь?Почему у него есть особый контекст для создания и обновления профилей?Я не думаю, что концепция отображается очень хорошо.

Для меня гораздо больше смысла говорить UserProfile.Update (имя пользователя, пароль, имя_первого ...).Вы говорите: «Выполните задачу Обновление из абстрактной концепции UserProfile для этого конкретного набора данных».

Имейте в виду, что мое использование слова аннотация строго образно, а не в компьютерной наукесмысл слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...