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

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

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

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

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

спасибо

Ответы [ 3 ]

10 голосов
/ 25 апреля 2010

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

Многие считают синглтон анти-паттерном .

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

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

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

6 голосов
/ 25 апреля 2010

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

4 голосов
/ 13 января 2011

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

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