Dúvida sobre Modelagens de Beans e Padrões  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Phillip,
Mas para fazer isso:

Eu teria de implementar um método equals() em todas as minhas classes. Não seria gerar um trabalho desnecessário?

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
pcalcado
Moderador
[Avatar]

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

Se você quer criar boas abstrações, não.

Primeiro, você tem certeza que vai querer espalhar seus ifs por um milhão de lugares diferentes no código, podendo ao invés disso chamar um método?

Além do que, como o Carlos mencionou, o ID é algo artificial, geralmente precisamos criar dados assim para coisas como persistência ou comunicação entre sistemas, na maioria isso interessa a apenas uma ou duas classes numa única camada.

Se você amarrar todas as classes clientes da sua ao conceito de ID (pra começar já vai estar expondo um dado a mais!), você vai fazer com que todas dependam do atributo artificial que foi feito só para uma "gambiarra" qualquer.

Além do que, o papel de definir se um objeto é igual ao outro é relativo. De repente, o ID não é tão importante, eu não poderia ter duas bandas chamadas "Creed", então meu equals deveria comparar os nomes também. Se eu fizer um && em todos os meus ifs espalhados por aí que comparam os códigos... putz, você vai aumentar o acoplamento enormemente por todo lugar.

Faça os clientes dependerem o quanto menos possível dos atributos das classes que disponibilizam um serviço, evite código repetido.

É claro que num sistema muito simples implementar equals pode ser um overhead, cabe a quem está programando analisar as opções, mas se você quer manter um acoplamento baixo, não dependa dos atrbiutos dos objetos

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á

Além do que o Phillip falou, saiba que fazer override de equals as vezes é ótimo, mas pode dar zebra. Lembre-se do capítulo 3 do livro Effective Java do Joshua Bloch que TODOS os programadores Java precisam ler ao menos uma vez:

Chapter 3, "Methods Common to All Objects"
item 7: Obedeça ao contrato geral.
Regras básicas:
- Não faça este override se:
1. Cada instância da classe é única (exemplo: Thread)
2. equals herdado de Object ou de uma superclasse é adequado
3. A classe é privada (ou só visível dentro do pacote) e o equals nunca será chamado
Caso faça o override:
1. Use o operador == para verificar se o argumento é uma referência a este objeto
2. Use o operador instanceof para verificar se o tipo está correto
3. Coloque cast no argumento para o tipo correto
4. Para cada campo "significante" da classe verifique se o tipo do campo é o mesmo do argumento
5. Depois de pronto o método equals pergunte a si mesmo se ele é simétrico, transitivo e consistente.

item 8: Sempre faça override de hashCode ao fazer override de equals

Mas por favor, sempre faça override do toString

[]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]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team