Шаблон Singleton с веб-приложением, не очень хорошая идея!

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

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

потому что Singleton основан на статической переменной, в которой хранится экземпляр, а статическая переменная находится в режиме обратной передачи, и я подключил событие, предполагая, что он будет подключен один раз и будет перезаписан для каждой обратной передачи.

Думаю, мы должны подумать дважды, прежде чем применять синглтон в веб-приложении, или я что-то пропустил??

спасибо

Ответ 1

Вы должны думать дважды при использовании статических объектов в многопоточном приложении (не только одноэлементном) из-за общего состояния. Для синхронизации доступа к общему состоянию следует применять правильные механизмы блокировки. В противном случае могут возникнуть некоторые проблемы с поиском ошибок.

Ответ 2

Я бы дважды подумал об использовании синглтона в любом месте.

Многие считают Singleton анти-шаблон.

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

В Википедии есть много ссылок, которые обсуждают это.

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

Ответ 3

Я использую Singletons в своих веб-приложениях в течение довольно долгого времени, и они всегда хорошо работали для меня, так что сказать, что это плохая идея, на самом деле довольно сложно претендовать на веру. Основная идея при использовании Singletons состоит в том, чтобы сохранить всю информацию, относящуюся к сеансу, и использовать их больше для глобальных или прикладных данных. Чтобы избежать их, потому что они "плохие", на самом деле не слишком умны, потому что они могут быть очень полезными при правильном применении.