Boa tarde galera!
Ouvi dizer que o padrão singleton está entrando em desuso.
Em um projeto que trabalhei, o contexto do EF, era armazenado em um singleton, onde em alguns momentos tínhamos problemas com informações desatualizadas, conseguimos resolver, mas essa afirmação acima me deixou curioso, o que vocês acham disso?
Boa tarde galera!
Ouvi dizer que o padrão singleton está entrando em desuso.
Em um projeto que trabalhei, o contexto do EF, era armazenado em um singleton, onde em alguns momentos tínhamos problemas com informações desatualizadas, conseguimos resolver, mas essa afirmação acima me deixou curioso, o que vocês acham disso?
--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br
Como tudo na vida, o que é usado em excesso pode trazer problemas.
Uso Singleton para algumas coisas, mas sempre ponderado.
Já tivemos problemas com SingleTon principalmente quando mandávamos requisições Ajax em paralelo, tivemos que mudar a estratégia.
Fábio Serratto
Microsoft Certified Professional Developer: Web Developer
Microsoft Certified Technology Specialist: Microsoft .NET Framework - Web Applications
Microsoft Certified Technology Specialist: .NET Framework 4, Web Applications – Charter Member / Early Achiever
Microsoft Certified Application Developer: For Microsoft .Net
Microsoft Certified Professional
Microsoft Certified Trainer
Gerente de Negócios e Tecnologia
IT Extreme Consultoria e Desenvolvimento de Sistemas Ltda
twitter: @fabioserratto
"Aprender é a unica coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende." (Leonardo da Vinci)
What ends up happening is that the dependencies in your design are hidden inside the code, and not visible by examining the interfaces of your classes and methods.
A class should not care whether or not it is a singleton. It should be concerned with its business responsibilities only. If you want to limit the ability to instantiate some class, create a factory or builder object that encapsulates creation, and in there, limit creation as you wish.
Singletons promote tight coupling between classes
One of the underlying properties that makes code testable is that it is loosely coupled to its surroundings.
Persistent state is the enemy of unit testing.
@Quaiato
Respondi antes de ler o post.
Deixa eu me explicar um pouco melhor....
Nos nossos projetos antigos utilizávamos fortemente o SingleTon, atualmente não
estamos vendo tanta necessidade, mas se percebermos que vai nos ajudar em algum
cenário, certamente utilizaremos.
O que eu acredito é que não adianta simplesmente fecharmos os olhos para o que já existia por estar caindo em desuso, existem coisas onde o bom e velho “arroz com feijão” resolvem bem o problema (ok, abriremos mão de algo mais moderno, práticas de design, testabilidade, acoplamento, etc e tal)
É só uma opinião pessoal
Fábio Serratto
Microsoft Certified Professional Developer: Web Developer
Microsoft Certified Technology Specialist: Microsoft .NET Framework - Web Applications
Microsoft Certified Technology Specialist: .NET Framework 4, Web Applications – Charter Member / Early Achiever
Microsoft Certified Application Developer: For Microsoft .Net
Microsoft Certified Professional
Microsoft Certified Trainer
Gerente de Negócios e Tecnologia
IT Extreme Consultoria e Desenvolvimento de Sistemas Ltda
twitter: @fabioserratto
"Aprender é a unica coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende." (Leonardo da Vinci)
De:
dotnetar...@googlegroups.com [mailto:dotnetar...@googlegroups.com] Em
nome de Vinicius Quaiato
Enviada em: quarta-feira, 13 de outubro de 2010 13:22
Para: dotnetar...@googlegroups.com
Assunto: Re: [dotnetarchitects] Singleton
Não é só o exagero que causa problemas com singletons... no artigo que mandei:
Vitor
Meriat Brasil |
|
Casa: (61) 3021-9086 Email: vitor...@gmail.com
Twitter: @vitormeriat |
|
This class must appear immutable to clients, even if it does all kinds of caching and pooling under the covers. It is crucial that the class is not only thread safe, but also highly concurrent. Synchronization must be used extremely sparingly.
Concordo com vc @Denis, não é porque em alguns casos o Singleton é Evil que devemos acabar com ele. O Singleton é muito útil (pra quem sabe utilizá-lo dá forma correta).
Só pra constar: nunca tive problemas com o NH em si, mas testar o código da nossa camada de configuração do NH foi um parto por causa do Singleton.
Acabei tendo que fazer arquivos de configuração da própria aplicação separados pra poder testar, se não fosse Singleton a volta teria sido menor.
Mas que Singleton vai atrapalhar a testabilidade, a não ser que use TypeMock, todo mundo já sabe. :-)
Abçs.
José Filipe
Oi pessoal,
[]s
Em 13/10/10, Roberta Arcoverde<roberta....@gmail.com> escreveu:
>>> artigo<http://codebalance.blogspot.com/2010/08/singleton-pattern-and-beyond.html>onde
>>>> Acho que todos usam. Mas lembrando que a SessionFactory é *especialmente
>>>>> preparada *para ser usada como Singleton, diferemente da Session.
>>>>>
>>>>> Diretamente da
>>>>> SessionFactoryImpl<https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs>
>>>>> :
>>>>>
>>>>> This class must appear immutable to clients, even if it does all kinds
>>>>> of caching
>>>>> and pooling under the covers. It is crucial that the class is not only
>>>>> thread safe,
>>>>> but also highly concurrent. Synchronization must be used extremely
>>>>> sparingly.
>>>>>
>>>>>
>>>>> 2010/10/13 Denis Ferrari <denis....@gmail.com>
>>>>>
>>>>>> Obrigado pela resposta Ricardo.
>>>>>>
>>>>>> Meu ponto é esse: Alguém não usa Singleton p/ gerenciamento da
>>>>>> SessionFactory?
>>>>>>
>>>>>> Abraços!
>>>>>>
>>>>>> Denis Ferrari (@denisferrari <http://twitter.com/denisferrari>) -
>>>>>> "Faça pouco, faça sempre e faça direito"
>>>>>> www.heroisdati.com
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2010/10/13 Ricardo Borges <ricard...@gmail.com>
>>>>>>
>>>>>> "você deve evitar ao máximo a utilização de métodos estáticos e nem
>>>>>>> singletons. Como resolver essa nossa necessidade? Certamente com
>>>>>>> injeção
>>>>>>> de dependências
>>>>>>> <http://www.martinfowler.com/articles/injection.html>.
>>>>>>> "
>>>>>>>
>>>>>>> Um bom container de IoC pode ter diferentes ciclos de vida pra cada
>>>>>>> componente, inclusive singleton.
>>>>>>>
>>>>>>> NH:
>>>>>>> Voce pode ter em seu projeto um container de IoC gerenciando a
>>>>>>> SessionFactory, e este ser um singleton na aplicação, o que é
>>>>>>> altamente
>>>>>>> recomendado pelo custo de construção de um objeto desses.
>>>>>>>
>>>>>>> Em 13 de outubro de 2010 14:04, Denis Ferrari <denis....@gmail.com
>>>>>>> > escreveu:
>>>>>>>
>>>>>>> Pessoal,
>>>>>>>>
>>>>>>>> Como vocês estão trabalhando com a configuração do NHibernate? Estão
>>>>>>>> utilizando Singleton ou outro meio?
>>>>>>>>
>>>>>>>> Abraços!
>>>>>>>>
>>>>>>>> Denis Ferrari (@denisferrari <http://twitter.com/denisferrari>) -
>>>>>>>>>>>> *Fábio Serratto*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Professional Developer: Web Developer*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Technology Specialist: Microsoft .NET
>>>>>>>>>>>> Framework - Web Applications*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Technology Specialist: .NET Framework 4,
>>>>>>>>>>>> Web Applications – Charter Member / Early Achiever*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Application Developer: For Microsoft .Net*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Professional*
>>>>>>>>>>>>
>>>>>>>>>>>> *Microsoft Certified Trainer*
>>>>>>>>>>>>
>>>>>>>>>>>> *Gerente de Negócios e Tecnologia*
>>>>>>>>>>>>
>>>>>>>>>>>> *IT Extreme Consultoria e Desenvolvimento de Sistemas Ltda*
>>>>>>>>>>>>
>>>>>>>>>>>> *www.itextreme.com.br* <http://www.itextreme.com.br/>* *
>>>>>>>>>>>>
>>>>>>>>>>>> *itx3.wordpress.com *
>>>>>>>>>>>>
>>>>>>>>>>>> *twitter: @fabioserratto*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *"Aprender é a unica coisa de que a mente nunca se cansa, nunca
>>>>>>>>>>>> tem medo e nunca se arrepende." (Leonardo da Vinci)*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *De:* dotnetar...@googlegroups.com [mailto:
>>>>>>>>>>>> dotnetar...@googlegroups.com] *Em nome de *Vinicius Quaiato
>>>>>>>>>>>> *Enviada em:* quarta-feira, 13 de outubro de 2010 13:22
>>>>>>>>>>>>
>>>>>>>>>>>> *Para:* dotnetar...@googlegroups.com
>>>>>>>>>>>> *Assunto:* Re: [dotnetarchitects] Singleton
>>>>>>>>>>>> Denis Ferrari (@denisferrari <http://twitter.com/denisferrari>)
>>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>> --
>>>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Vitor*
>>>>>>>>>>
>>>>>>>>>> *Meriat*
>>>>>>>>>> Desenvolvedor C#
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> <http://www.inforplus.inf.br/>Brasília, DF
>>>>>>>>>>
>>>>>>>>>> Brasil
>>>>>>>>>>
>>>>>>>>>> [image: Descrição: Descrição:
>>>>>>>>>> http://www.linkedin.com/img/signature/pic_plastic_slate_26x130.gif]
>>>>>>>>>>
>>>>>>>>>> *Casa:* (61) 3021-9086
>>>>>>>>>> *Mobile:* (61) 8587-0613
>>>>>>>>>>
>>>>>>>>>> *Email:* vitor...@gmail.com
>>>>>>>>>> *Email:* vitor...@hotmail.com
>>>>>>>>>>
>>>>>>>>>> *Twitter:* @vitormeriat <http://www.twitter.com/vitormeriat>
>>>>>>>>>> [image: Descrição: Descrição:
>>>>>>>>>> http://www.linkedin.com/img/signature/icon_in_blue_14x14.gif]*Perfil
>>>>>>>>>> profissional <http://br.linkedin.com/pub/vitor-meriat/1b/706/1a0>*
>>>>>>>>>> *Meu Blog <http://vitormeriat.wordpress.com/>*
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>>> Architects hospedado no Google Groups.
>>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net
>>>>>>>>> Architects
>>>>>>>>> hospedado no Google Groups.
>>>>>>>>> Para postar envie uma mensagem para
>>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>>> Para mais opções visite o grupo em
>>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>>>>>>> hospedado no Google Groups.
>>>>>>>> Para postar envie uma mensagem para
>>>>>>>> dotnetar...@googlegroups.com
>>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>>> Para mais opções visite o grupo em
>>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Ricardo Borges
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>>>>>> hospedado no Google Groups.
>>>>>>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>>>>>>> Para sair do grupo envie uma mensagem para
>>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>>> Para mais opções visite o grupo em
>>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>>>>> hospedado no Google Groups.
>>>>>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>>>>>> Para sair do grupo envie uma mensagem para
>>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>>> Para mais opções visite o grupo em
>>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Kind regards,
>>>>> *Juan Lopes*
>>>>>
>>>>> --
>>>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>>>> hospedado no Google Groups.
>>>>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>>>>> Para sair do grupo envie uma mensagem para
>>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>>> Para mais opções visite o grupo em
>>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>>
>>>>
>>>> --
>>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>>> hospedado no Google Groups.
>>>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>>>> Para sair do grupo envie uma mensagem para
>>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>>> Para mais opções visite o grupo em
>>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>>
>>>
>>>
>>>
>>> --
>>> Kind regards,
>>> *Juan Lopes*
>>>
>>> --
>>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>>> hospedado no Google Groups.
>>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>>> Para sair do grupo envie uma mensagem para
>>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>>> Para mais opções visite o grupo em
>>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>>
>>
>> --
>> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
>> hospedado no Google Groups.
>> Para postar envie uma mensagem para dotnetar...@googlegroups.com
>> Para sair do grupo envie uma mensagem para
>> dotnetarchitec...@googlegroups.com<dotnetarchitects%2Bunsu...@googlegroups.com>
>> Para mais opções visite o grupo em
>> http://groups.google.com/group/dotnetarchitects?hl=pt-br
>>
>
>
>
> --
> Roberta Lopes Arcoverde
>
> --
> Você recebeu esta mensagem porque faz parte do grupo .Net Architects
> hospedado no Google Groups.
> Para postar envie uma mensagem para dotnetar...@googlegroups.com
> Para sair do grupo envie uma mensagem para
> dotnetarchitec...@googlegroups.com
> Para mais opções visite o grupo em
> http://groups.google.com/group/dotnetarchitects?hl=pt-br
--
*Jarbas B. M. Segundo*
Blog: http://www.jsegundo.com.br
Skype : jbmsegundo
Olá pessoal
Eu concordo com o Denis. No livro “Utilizando UML e Padrões”, Craig Larman diz que a utilização de padrões em excesso é imaturo. É uma questão de discernimento, basta entender o cenário onde cabe a sua utilização.
Abraços,
Nelson R L Bassetto
Os padrões emergem da necessidade de utilizá-los, há casos especificos para usar o Singleton, assim como qualquer outro padrão.
Como eu disse, o Singleton tem problemas de design inerentes a ele. Se são problemas suportáveis, ok. Mas eles existem e não se pode negar.
Vinicius, seguindo o seu exemplo do DateTime.Now, me fala sua visão sobre:
- Porque injetamos dependencia para o SessionFactory, mas não injetamos para o DateTime se ambos são SingleTon? - Porque injetamos dependencia dos objetos externos, mas não injetamos para os objetos do .NET Framework? Posso estar com uma visão limitada, mas vejo que existe uma necessidade natural da existencia do SingleTon. O SingleTon não se torna bom ou ruim, devido a utilização ou não de um DI. Existem formas de usar o SingleTon, sem DI, que não acoplam o código e etc. Logo porque ele seria ruim? Atenciosamente Sidney Lima Filho Vivina Softhouse (0xx21) 7867-2321 55*10*68934 http://www.vivina.com.br | http://twitter.com/vivina |