| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2009 20:54:59
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
Extraido do Blog da Caelum:
http://blog.caelum.com.br/
Dêem uma olhada no código do seguinte método:
public Projeto criaProjeto(String nomeProjeto,
String descricaoProjeto) {
// Executa a lógica de criação do projeto
}
Digamos que esse seja um factory method para criação de Projeto. Ele seria usado da seguinte forma:
new FabricaDeProjeto().criaProjeto("nome", "descrição");
Mas nada impede que esse método seja chamado dessa forma:
new FabricaDeProjeto().criaProjeto("descrição", "nome");
Continua !!!!
public Projeto criaProjeto(Nome nomeProjeto,
Descricao descricaoProjeto) {
// executa a lógica de criação do projeto
}
Ganhamos checagem em tempo de compilação. Mas apenas isso? Vamos olhar como esse método seria usado:
new FabricaDeProjeto()
.criaProjeto(new Nome("nome"), new Descricao("descrição"));
This message was edited 4 times. Last update was at 27/07/2009 21:14:03
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2009 23:17:09
|
Leozin
JWizard
![[Avatar]](/images/avatar/5dca4c6b9e244d24a30b4c45601d9720.png)
Membro desde: 18/06/2005 21:01:26
Mensagens: 2310
Localização: São Paulo/SP
Online
|
Olá
Eu acabei visitando o blog deles e achei interessante essa abordagem
Pra quem leu o livro "thoughtworks antology", tem uma parte que é falado de algo parecido sobre a criação de classes, o que dava a entender a respeito de um sistema "full tyne typed" (nossa que termo é esse? rs)
Não cheguei a parar pra pensar muito nisso, mas de fato o sistema fica muito elegante dessa maneira IMHO. O que talvez dificulte um pouco é quando você quiser persistir isso em uma classe que tenha muitos atributos, o que você terá que usar muitos "Embedded" (JPA/Hibernate Annotations).
|
http://www.leozin.com.br/blog |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 06:42:42
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Offline
|
Interessante, nunca tinha pensado dessa forma.
Mas digam-me uma coisa, seriam criadas várias minúsculas classes pra essas validações?
Quais critérios seria sensato seguir para determinar quando é bom e quando não é bom criar tyne types?
Abraços!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 08:10:09
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Eu reconheço que isso é útil para classes como CPF, CNPJ, coisas que tem um pouco mais de comportamento.
Agora, para Nome, Descrição, para mim isso é para contornar uma deficiência de linguagens que não tem parâmetros/argumentos nomeados.
This message was edited 1 time. Last update was at 28/07/2009 08:10:30
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 08:24:26
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
Digamos que esse seja um factory method para criação de Projeto ? Digamos que não seja um factory method, ou digamos que seja um Iterator, como ficaria ?
Iterator(Iterador) é um padrão de projeto que visa simplificar a iteração sobre um conjunto de objetos.
This message was edited 2 times. Last update was at 28/07/2009 08:25:10
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:15:24
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Seria muito útil naquelas horas que estamos usando o auto-complete da IDE com um método desconhecido, e tudo o que ele mostra são aquelas assinaturas malucas
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:20:31
|
bKn
Java Ninja
Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline
|
Não vejo utilidade nisso, javadoc é suficiente.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:21:41
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Offline
|
gomesrod wrote:Seria muito útil naquelas horas que estamos usando o auto-complete da IDE com um método desconhecido, e tudo o que ele mostra são aquelas assinaturas malucas

Poucas coisas me dão tanto ódio quanto isso.
Ai você consulta o javaDocs e... "JavaDocs not available" arrrrrrrrrghh!
Daí só resta consultar o oráculo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:39:17
|
Alexandro.Almeida
JavaBaby
![[Avatar]](/images/avatar/185d74f7b374c0ac461ca88fdb8c8b4a.jpg)
Membro desde: 25/07/2008 09:00:19
Mensagens: 98
Localização: Itu
Offline
|
Bruno Laturner wrote:Eu reconheço que isso é útil para classes como CPF, CNPJ, coisas que tem um pouco mais de comportamento.
Agora, para Nome, Descrição, para mim isso é para contornar uma deficiência de linguagens que não tem parâmetros/argumentos nomeados.
Concordo.
E fora que polui ainda mais o já poluido código Java.
|
--
Alexandro D. Almeida
Meu antigo perfl perdido http://www.guj.com.br/user/profile/15752.java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:53:43
|
Juk
JavaChild
![[Avatar]](/images/avatar/f2b6806d6ed60d2d87b0dd5ae62e6f20.jpg)
Membro desde: 14/07/2006 18:09:33
Mensagens: 104
Offline
|
Achei horrível. Muito verboso e parte do princípio que o desenvolvedor é uma porta que não consegue ler.
|
Meu blog: http://blogdojuk.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 10:00:31
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Offline
|
Juk wrote:Achei horrível. Muito verboso e parte do princípio que o desenvolvedor é uma porta que não consegue ler.
Mas temos que concordar que alguns não sabem escrever. hehehehe
Independente disso, entramos naquele paradigma de "orientação a strings", pelo menos pra mim fez sentido a princípio.
JavaDocs é lindo, adoro quando tem a descrição toda do método chamado com explicação dos argumentos, exceptions, etc.
Abraços.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 10:41:40
|
mochuara
GUJ Master
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline
|
Digamos que esse seja um factory method para criação de Projeto. Ele seria usado da seguinte forma:
Não seria melhor aproveitarmos a tipagem explícita do Java para pegarmos esse problema em tempo de compilação? Ganhamos checagem em tempo de compilação. Mas apenas isso? Vamos olhar como esse método seria usado:
O código ficou mais expressivo.
Wow. Serio? Eu discordo quanto ao ganho de expressividade.
Sem falar que definir novas classes é algo básico do paradigma OO, não estou certo se preciso de um novo nome pra isso. Qual será o próximo passo, um framework para criar objetos em Java?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 11:45:16
|
Mero_Aprendiz
JavaEvangelist
![[Avatar]](/images/avatar/298f587406c914fad5373bb689300433.jpg)
Membro desde: 25/08/2004 11:32:27
Mensagens: 380
Localização: Goiânia
Offline
|
Marcio Duran wrote: Ganhamos checagem em tempo de compilação. Mas apenas isso? Vamos olhar como esse método seria usado: new FabricaDeProjeto().criaProjeto(new Nome("nome"), new Descricao("descrição"));
Bem, dando minha simples opinião, acredito que o JavaDoc resolve o problema. Mas se quizer algo mais representativo de nome e descrição, o mais correto seria: Uma classe para nome e uma para descrição não me parece certo. P.S.: Ess new seguido de Fabrica também não me parece certo. Em todo caso, é apenas uma abordagem. []'s JL
This message was edited 1 time. Last update was at 28/07/2009 11:47:35
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 11:58:43
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Marcio Duran wrote:
new FabricaDeProjeto()
.criaProjeto(new Nome("nome"), new Descricao("descrição"));
É. Realmente ess eexemplo não é muito feliz porque ainda posso escrever assim :
Isto é um problema conhecido porque não ha inteligencia sobre o conteudo de strings. Isso é responsabilidade do programador. Mas sendo assim, tb era no exemplo sem tiny type.
Para objetos como CEP , Telefone e Periodo faz sentido tiny type, mas para String é meio estranho
Tiny Types costumam ser acompanhados de métodos de fábrica que validam os dados primitivos. Por exemplo
Tiny Types são Value Objects mais fortemente tipados e como tal seguem as mesmas regras. Lembrar que todos os wrappers de pimitivos, BigDecimal e BigInteger são Value Objects e dai o idioma comum valueOf usado nesses tipos.
Value Object.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 12:14:30
|
mochuara
GUJ Master
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline
|
sergiotaborda wrote:Tiny Types são Value Objects mais fortemente tipados e como tal seguem as mesmas regras. Lembrar que todos os wrappers de pimitivos, BigDecimal e BigInteger são Value Objects e dai o idioma comum valueOf usado nesses tipos.
Value Object.
Infelizmente Value Object já é um termo utilizado pelo povo do DDD. Tiny Types até poderia ser este Value Object que não é aplicado ao domínio mas o nome da impressão de um tipo especial de objeto, que é pequeno e limitado. Ou seja, péssimo pra passar a idéia.
|
|
|
 |
|
|