--
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
O design da sua classe permite que alguém faça algo do tipo
venda.Vendedor = meuAmigoQueNaoVendeuNada ou
venda.Vendedor.FilialAtual = null,
o que são coisas que vc com certeza não pode deixar acontecer...a
classe está pronta pra ser abusada!
Se vc precisa expor o nome completo da filial onde ocorreu uma venda,
deveria ter um método venda.NomeFilial() ou algo assim com nome mais
bonitinho.
Em geral quando a gente se vê escrevendo algo do tipo A.B.C.D, ou
seja, muito ".", é pra ficar de olho (a não ser em caso de interfaces
fluentes, que são outros 500)
- Rodrigo
--
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
2010/9/8 Humberto Marchezi <hcmar...@gmail.com>:
(.... ) While working on this paper, I was trying to determine why it is called the Law of Demeter. I found several references, but none with a good explanation The Law Of Demeter was first published in [ Lieberherr +], and Demeter is the name of a research project at Northeastern University [Demeter] (...)
P.S. off-topic: Demeter em português deveria ser traduzido como
Deméter mesmo, que é a deusa grega da agricultura. Agora, pq que deram
esse nome, eu não sei :P Por mim eu chamaria de "princípio do ponto
único" rs
--
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
Um motivo porque eu não gosto de
venda.Vendedor.FilialAtual.NomeCompleto é que é muito chato ter que
ficar "navegando" nesse tipo de grafo; com certeza vc já se viu numa
situação similar a alguém que tem um objeto "venda" na mão, precisa
mostrar o nome da filial onde ocorreu a venda, e passa 5 minutos
mexendo com intelissense a partir de "venda." até descobrir onde tá a
danada da informação!
Se vc realmente precisa acessar a informação sobre nome da filial a
partir da venda, melhor trazer essa informação pra perto da venda. O
cara digita "venda." e pronto, tá lá o que ele precisa. E aí entra a
reflexão sobre a necessidade ou não de trazer essa informação..pode
ser que dentro do contexto q vc se encontra é melhor acessar a filial
de outra forma.
Sem falar que venda.Vendedor.FilialAtual.NomeCompleto é um convite pra
um null ref exception mais cedo ou mais tarde.
2010/9/9 Hamon Vitorino <cham...@gmail.com>:
O Martin Fowler uma vez falou o seguinte: "I'd prefer it to be called
the Occasionally Useful Suggestion of Demeter." :)
Por exemplo dentro do DDD, acho q não tem tanto problema vc navegar
dentro do seu aggregate root, a coisa só fica feia se através de um
método vc se vê pulando de um aggregate pra outro.
Quoted from the Portland Pattern Repository a.k.a. The WikiWikiWeb
"If you want your dog to run, do you talk [to] your dog or to each leg? Further, should you be able to manipulate the dog's leg without it knowing about it? What if your dog wants to move its leg and it doesn't know how you left it? You can really confuse your dog."
The moral: Change the state of a contained object only through the containing object's interface.
"Aha!" you say. "If I employ the technique of encapsulation, then a method won't even know of the existence of any contained objects."
That's precisely the point. To walk your dog, you don't need to know of the existence of its legs. (And in fact, dogs with fewer than four legs can go for walks. There is even a case of a dog whose hindquarters rested on a little carriage; its "walk" method employed two legs and two wheels (these latter, one hopes, encapsulated within a "carriage" interface).)
Se vc tiver um cenário onde o acoplamento com a classe produto não for desejável (não consigo pensar neste caso), vc pode até criar um método na classe venda para retornar a descrição de um produto.
venda.obterDescricaoDoProduto(codigoDoProduto);