Singleton Detector  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Fabio Kung
JavaEvangelist

Membro desde: 08/03/2004 08:24:47
Mensagens: 445
Localização: São Paulo
Offline

Estamos salvos!

http://code.google.com/p/google-singleton-detector/

Procurando por oportunidades de emprego?
OndeTrabalhar.com
OndeTrabalhar.com Java?


http://blog.caelum.com.br


Fabio Kung
[WWW] [MSN] [ICQ]
fsquadro
GUJ Master
[Avatar]

Membro desde: 10/07/2006 17:19:04
Mensagens: 1197
Localização: Florianópolis - SC
Offline

Fabio,

Quem vai adorar isso é o Shoes. hehehe!

"Coisas boas estão dentro de pequenos arquivos .jar"


Fernando Quadro
Blog
twitter
LinkedIn
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Fico até triste quando vejo vocês falando tão mal assim do tadinho do Singleton! rs...

Até concordo que o uso excessivo é muito ruim, mas tem horas que ele ajuda muito.

O que vocês acham? Singleton para vocês nunca mais?

Estava montado uma estrutura de classes para facilitar a construção de janelas com componentes HAVI para XLETS. Nesta estrutura eu criei um singleton!

Implementei um SeviceLocator singleton abstrato para o ambiente. Desta forma eu posso criar ambientes concretos para injetar as dependências no ambiente abstrato. Mas continuo tendo uma ambiente abstrato singleton isso é muito ruim? Tá muito ruim? Tem alguma forma melhor de fazer isso?



Aguardo suas opiniões.

[]s
vanzella
JavaEvangelist
[Avatar]

Membro desde: 05/01/2007 18:45:15
Mensagens: 381
Localização: Cuiaba - MT
Offline

brunohansen quando colocar seu codigo use Code e não Quote

Olhe a diferença:



protected AbstractAmbiente(XletContext _contexto) {
super();
contexto = _contexto;
carregaAmbiente();
}

Sun Certified Java Programmer 5.0
"Se você não esta confuso, não esta prestando atenção!"
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Eu não entendo do domínio mas tenho a impressão que a coesão no seu Singleton é bem baixa.


Mas este ainda não é o pior problema, por que este Singleton não pode ser substituído por (1)Uma factory que retorna apenas a mesma instância ou (2) Dependency Injection?

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

vanzella wrote:brunohansen quando colocar seu codigo use Code e não Quote


Bem observado, editei o post dele para fazer como você sugeriu.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Luca wrote:Olá

vanzella wrote:brunohansen quando colocar seu codigo use Code e não Quote


Bem observado, editei o post dele para fazer como você sugeriu.

[]s
Luca


Foi malz cliquei no botão errado e nem reparei! (Sabe como é postar em horário de serviço)
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

pcalcado wrote:Eu não entendo do domínio mas tenho a impressão que a coesão no seu Singleton é bem baixa.


Rs... É pode ser, mas preferi colocar as 3 coisas no mesmo lugar para facilitar criar ambientes.

pcalcado wrote:
Mas este ainda não é o pior problema, por que este Singleton não pode ser substituído por (1)Uma factory que retorna apenas a mesma instância ou (2) Dependency Injection?


Estou um pouco confuso em relação ao foi dito, mas... (Entendi menos ainda quando você disse: "...que retorna apenas a mesma instância..." )

Digamos que tivesse uma fábrica das coisas do ambiente, eu teria o mesmo problema para encontrar a fábrica que esta configurada para eu usar. Da mesma forma me pareceria um singleton (Fazer injeção de dependência na mão daria muito trabalho)

Acho que estou destruindo o post inicial (Desculpa ae pessoal), se alguém puder mover o que está relacionado com a minha dúvida para outro tópico derrepente seria melhor.

Valeu ae pessoal pela ajuda!
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

brunohansen wrote:
Estou um pouco confuso em relação ao foi dito, mas... (Entendi menos ainda quando você disse: "...que retorna apenas a mesma instância..." )

Digamos que tivesse uma fábrica das coisas do ambiente, eu teria o mesmo problema para encontrar a fábrica que esta configurada para eu usar. Da mesma forma me pareceria um singleton (Fazer injeção de dependência na mão daria muito trabalho)


Sim, sabemos disso. O ponto é que você não precisa de um Singleton, precisa de uma variável global. O que eu estou sugerindo é uma global que minimiza o problema de usar o Singleton (testabilidade e extensibilidade, por exemplo). É a melhor solução? Não. A melhor solução é acabar com a necessidade da global. Enquanto você trabalha no problema de como fazer IoC neste caso a idéia é pelo menos minimizar os efeitos do design atual

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

pcalcado wrote:
Sim, sabemos disso. O ponto é que você não precisa de um Singleton, precisa de uma variável global.


Singleton não éuma forma de implementar uma variável global?

pcalcado wrote:
O que eu estou sugerindo é uma global que minimiza o problema de usar o Singleton (testabilidade e extensibilidade, por exemplo). É a melhor solução? Não.


Acho que a forma que eu fiz oferece testabilidade e extensibilidade, pois posso fazer um ambiente herdar de AbstractAmbiente e registralo em AbstractAmbiente. Dá mesmas forma posso criar um mock para fazer teste.

pcalcado wrote:
A melhor solução é acabar com a necessidade da global. Enquanto você trabalha no problema de como fazer IoC neste caso a idéia é pelo menos minimizar os efeitos do design atual


Ainda não pesquei como posso minimizar os efeitos do design atual....


pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

brunohansen wrote:
Singleton não éuma forma de implementar uma variável global?


Não. Singleton é um objeto que só pode ser instanciado uma vez. Se isntanciar mais de uma vez seu sistema está num estado inválido.

O fato de um Singleton geralmente ter uma variável global expressa na forma de um método estático para obtêr uma instância é uma consequência, e é só isso que você parece precisar.

brunohansen wrote:Acho que a forma que eu fiz oferece testabilidade e extensibilidade, pois posso fazer um ambiente herdar de AbstractAmbiente e registralo em AbstractAmbiente. Dá mesmas forma posso criar um mock para fazer teste.


Vamos tentar um exemplo. Imagine o código:


Como eu faço o primeiro código usar OutroSingleton ao invés da classe-pai? Quantos lugares eu teria que mudar num sistema real?

Outra coisa: como você cria um teste unitário para uma variável global? Seus testes estarão compartilhando o mesmo recurso (o Singleton) e serão dependentes um do outro, o que é bem ruim. Imagine:



Como a classe é uma variável global os dois testes são mutuamente dependentes.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

pcalcado wrote:
Não. Singleton é um objeto que só pode ser instanciado uma vez. Se isntanciar mais de uma vez seu sistema está num estado inválido.

O fato de um Singleton geralmente ter uma variável global expressa na forma de um método estático para obtêr uma instância é uma consequência, e é só isso que você parece precisar.


Em relação ao singleton você tem toda a razâo. Acho que meu problema me fez descuidar do conceito do singleton!

Porém, pensando melhor Eu devo ter somente uma única cena, um único contexto e uma única FacImgensJanela! No meu caso, não faz sentido eu ter vários contextos, cenas, facsImagensJanela para um mesmo ambiente. Será que desta forma o singleton pode continuar onde está?

pcalcado wrote:
Vamos tentar um exemplo. Imagine o código:


Como eu faço o primeiro código usar OutroSingleton ao invés da classe-pai? Quantos lugares eu teria que mudar num sistema real?


Eu faço assim: O MeuSingleton tem o atributo estático e o método para recuperar a instância (getInstance()); O OutroSingleton tem o método que carrega sua instância para o MeuSingleton (Isto é o que meu código que eu postei lá em cima faz: O AmbientePadão carrega sua instancia para o AbstractAmbiente).

Seu código ficaria assim:




pcalcado wrote:
Outra coisa: como você cria um teste unitário para uma variável global? Seus testes estarão compartilhando o mesmo recurso (o Singleton) e serão dependentes um do outro, o que é bem ruim. Imagine:



Como a classe é uma variável global os dois testes são mutuamente dependentes.


Outra vez você tem razão! Um exemplo vale por mil palavras!
Um gatilho seria isolar os métodos de teste e assim torna-los independentes.



Só mais uma dúvida!

Para eu minimizar meu uso do singleton!

Eu poderia criar um Registry, o fazendo ser um ponto único global onde eu acho as coisas, e registrar meu contexto, minha cena e minha facImagensJanela neste singleton. Esta seria uma forma de minimizar?

Valew pela ajuda Shoes!

pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

brunohansen wrote:Porém, pensando melhor Eu devo ter somente uma única cena, um único contexto e uma única FacImgensJanela! No meu caso, não faz sentido eu ter vários contextos, cenas, facsImagensJanela para um mesmo ambiente. Será que desta forma o singleton pode continuar onde está?


Coincidentemente o padrão Singleton oferce um comportamento parecido com o que você quer, mas o que você quer não é um Singleton. Vale a pena abrir mão do que se precisa para ter um Singleton quando se pode ter uma Factory como comentei? Geralmente não pelos problemas que estamos discutindo abaixo.

brunohansen wrote:
Eu faço assim: O MeuSingleton tem o atributo estático e o método para recuperar a instância (getInstance()); O OutroSingleton tem o método que carrega sua instância para o MeuSingleton (Isto é o que meu código que eu postei lá em cima faz: O AmbientePadão carrega sua instancia para o AbstractAmbiente).


Me expressei mal: como eu faço para usar um no lugar do outro. Vamos supor que o novo Singleton possui recursos de segurança implementados via AOP por um framework oua mão mesmo, como eu faço para que meu código trabalhe com esta versão 'turbinada' em alguns casos e com a versão normal em outros? Em suma: como eu uso polimorfismo?

brunohansen wrote:
Outra vez você tem razão! Um exemplo vale por mil palavras!
Um gatilho seria isolar os métodos de teste e assim torna-los independentes.


Seu pensamento está na linha correta mas sincronizar os testes é ruim, principalmente porque você vai perder performance (imagina executar 100 testes durante o build com 1 segundo cada).

brunohansen wrote:
Só mais uma dúvida!

Para eu minimizar meu uso do singleton!

Eu poderia criar um Registry, o fazendo ser um ponto único global onde eu acho as coisas, e registrar meu contexto, minha cena e minha facImagensJanela neste singleton. Esta seria uma forma de minimizar?


Seria sim. Só cuidado para o Registry não virar seu novo problema

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team