Vous êtes sur la page 1sur 3

16/10/2016

c#SessovspadroSingletonStackOverflow

inscreverse

logem

turn

ajuda

xDispensar

JunteseComunidadedeestourode
pilha
Stack Overflow uma comunidade de 4,7 milhes
de programadores, assim como voc, ajudando uns
aos outros.
Juntese a eles leva apenas um minuto:
inscreverse

SessovspadroSingleton

Tenhoumaaplicaowebondeeugostariadepuxarasconfiguraesdousurioapartirdeumbancodedadosearmazenlosparaoacesso
global.FariamaissentidoparaarmazenarosdadosemumSingleton,ouumobjetodesesso?Qualadiferenaentreosdois?
melhorparaarmazenarosdadoscomoumarefernciadeobjetooudividiloemtipodevalorobjetos(intsecordas)?
Obrigado!
c# asp.net asp.netmvc designpatterns
perguntou12demaio'10s19:07

chobo
9658

23

87

157

5Respostas

Sesso.Issooquepara.Asessoarmazenadonocacheglobal(basicamenteum
singleton),fechadopelaIDdesesso.Dessaforma,vocobterapenasosdadosparaasesso
deinteresse.Usandoumsingletonseriabasicamentereplicandoocacheglobalevoctemque
reinventaromecanismopararecuperardadosparacadasessodeformaindependente.
Vemfrenteearmazenaroobjeto.DeixeapreocupaoSessosobreserializaoloaalgo
quepodeserrestaurado.Tenhacuidado,porm,comoquevoccolocarnaSesso.Vocno
querparaarmazenarmuitosdadoslouvocvaiusarumagrandequantidadedememria
(supondoqueumcachedememria).
respondeu12demaio'10em19:10

tvanfosson
351k

65

571

700

Seessasconfiguraesserousadasparatodososusuriosdosite,coloqueosemumanica
ouemcachedoaplicativo.Seelessoespecficosparacadausurio,coloclosemsesso.
UserefernciasdeobjetoaoadicionaraaplicaoousessodecacheAcreditoquetiposde
valorvaificarencaixotadoporissoelesseparecemcomobjetosparaocache.Sevocusarum
singleton,quepoderiairdequalquermaneira.
respondeu12demaio'10em19:10

Raio
16k

29

48

objetodesesso,definitivamente.

http://stackoverflow.com/questions/2821941/sessionvssingletonpattern

1/3

16/10/2016

c#SessovspadroSingletonStackOverflow

Singletonsexistiraonveldoprocesso.Istosignificaquesevoctem20usuriosqueacessam
seusiteaqualquermomento,elesestousandoomesmoobjetoSingleton.difcilse
acostumarcomesteconceito,sevocnoestfazendoodesenvolvimentowebmuito.
existemsessesnonveldousurio.Issosignificaquevocpodearmazenardadosporusurio,
enoporprocesso.
respondeu12demaio'10em19:11

Doug
3142

22

27

svezeseugostodomtodoabaixo.Elacuidadosproblemascomcordasmgicasevariveis
desessonodefinidas.Tambmcorreosingletonnonveldasesso,emvezdonvelde
aplicao.
publicstaticSessionHandlerGetInstance()
{
if(HttpContext.Current.Session["SessionHandler"]==null)
{
HttpContext.Current.Session["SessionHandler"]=newSessionHandler();
}
return(SessionHandler)HttpContext.Current.Session["SessionHandler"];
}

Emseguida,bastauslocomoumsolteironormal.Colocarnasvariveisquevocprecisa.
respondeu11demaroem18:14

user2245175
6

Istotomadodeumdocumentoantigo,masaindamuitovlidoefuncionaumtratamento...Eu
voucolocarocontedodelinksaqui,especialmenteporqueumlinkantigoquepode
desaparecer.Tomadodaqui.
fundo
OobjetodesessoemASP.Netpodeserusadoparaarmazenarinformaesqueespecfico
paraumusurioindividualdosite.Asessoindexadaporumnomedechave,equandoele
usadodirectamente,detalmodoquepodeconduziraumgrandenmerodenomesdesesso
individuais.Umaabordagemalternativaavezcriarumobjetosingletonparaagruparitens
relacionadoselojaqueobjetocomumdeterminadonomedachave.O"solteiro"umpadrode
designcomumqueespecificaaformadegarantirqueapenasumanicainstnciadeuma
classeexistenteaqualquermomento.
VantagensdesessoSingletonObjects
Agrupamentodeitensdesessoparafinsdeorganizao
Especialmentetilparaumasriedepginasdeumprocessotransitrio,comoregistroem
umsite.Umavezqueoprocessoestcompletooobjetopodeserapuradasapartirda
sessodemodoqueamemriapodeserrecuperada(melhorutilizaodosrecursosdo
servidor)
anlisedoimpactodasalteraessinformaesdesessomuitomaisfcil
Identificarasreasdositequeestofazendomauusodainformao(muitomaisclarado
queapenasusandoonomedavarivelparadeterminarseeleadequadoparaouso)
Intellisenseparanomesdepropriedadeetiposdeumavezacessaroobjeto
DesvantagensdesessoSingletonObjects
MaisdifcildeveronmerodeitensindividuaisemsessoresultadosASP.Netrastreamento
nomostraosvaloresdentrodadegradaododesempenhoobjetoaousarforado
armazenamentodeestadodesessodoprocesso(afetaserializao)
Implementao
Aprimeiraetapadeimplementaocriarumarquivodeclassequerepresentaoagrupamento
lgicodeitensquedevemserarmazenadosjuntosnonicoobjeto.Oquesesegueuma
classedeexemploquedemonstraatcnica:
publicclasssingleton
{
//NamethatwillbeusedaskeyforSessionobject
privateconststringSESSION_SINGLETON="SINGLETON";
//Variablestostorethedata(usedtobeindividual
//sessionkey/valuepairs)
stringlastName="";
stringfirstName="";
publicstringLastName
{
get
{
returnlastName;

http://stackoverflow.com/questions/2821941/sessionvssingletonpattern

2/3

16/10/2016

c#SessovspadroSingletonStackOverflow

}
set
{
lastName=value;
}
}
publicstringFirstName
{
get
{
returnfirstName;
}
set
{
firstName=value;
}
}
//Privateconstructorsocannotcreateaninstance
//withoutusingthecorrectmethod.Thisis
//thisiscriticaltoproperlyimplementing
//asasingletonobject,objectsofthis
//classcannotbecreatedfromoutsidethis
//class
privatesingleton()
{
}
//Createasastaticmethodsothiscanbecalledusing
//justtheclassname(noobjectinstanceisrequired).
//Itsimplifiesothercodebecauseitwillalwaysreturn
//thesingleinstanceofthisclass,eithernewlycreated
//orfromthesession
publicstaticsingletonGetCurrentSingleton()
{
singletonoSingleton;
if(null==System.Web.HttpContext.Current.Session[SESSION_SINGLETON])
{
//Nocurrentsessionobjectexists,useprivateconstructorto
//createaninstance,placeitintothesession
oSingleton=newsingleton();
System.Web.HttpContext.Current.Session[SESSION_SINGLETON]=oSingleton;
}
else
{
//Retrievethealreadyinstancethatwasalreadycreated
oSingleton=(singleton)System.Web.HttpContext.Current.Session[SESSION_SINGLETON];
}
//Returnthesingleinstanceofthisclassthatwasstoredinthesession
returnoSingleton;
}
}

Umapginaquequerusaresseobjetosimplesmentefazoseguinte:
singletonoSingleton=singleton.GetCurrentSingleton();
oSingleton.FirstName="Robert";
oSingleton.LastName="Boedigheimer";

Tipicamente,estatcnicavaiarmazenarmuitosmaisvariveisdeumadeterminadaclasseou
seroutilizadasparaumasriedepginasdawebquerealizarumprocesso.Outravantagem
deusarissoparaumprocessoemumwebsitequetodaamemrianecessriaparaas
variveisdesessopodemseresvaziados,simplesmenteremovendoarefernciaparaoobjeto
singleton.Aclassepodeimplementarummtodoqueosclientespodemusarparalimpara
referncia,elepodeserchamadoDispose()paraseguiropadrotpico.Netquandoumaclasse
forneceumamaneiradelimpeza:
publicstaticvoidDispose()
{
//CleanupthisobjectsothatGCcanreclaimspace
System.Web.HttpContext.Current.Session.Remove(SESSION_SINGLETON);
}

Concluso
HmuitasvantagensemusarobjetosSingletonarmazenadosnoobjetoSessionemvezdeusar
aschavesdesessoindividuaisparaarmazenarinformaes.tilparaobjetosqueso
destinadosaexistirportodaasesso(agruparitenslgicas,anlisedeimpacto,intellisense,
etc)eespecialmenteparaobjetosquesorealmenteapenasnecessriosparaumperodode
tempoemumsiteatqueousurioconcluiumdeterminadoprocesso(muitomaisfcilidentificar
mauusodevariveisedeconservarosrecursosquandooprocessoconcludo,masa
sessocontinuar).
respondeu20demaioem08:34

PaulZahra
5540

http://stackoverflow.com/questions/2821941/sessionvssingletonpattern

22

44

3/3

Vous aimerez peut-être aussi