(blog.caelum.com.br) Tiny Types minimizar erros ou é uma forma de Refatoração ?  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
Marcio Duran
GUJ Master
[Avatar]

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
[WWW]
Leozin
JWizard
[Avatar]

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
[ICQ]
Tchello
GUJ Master
[Avatar]

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!
Bruno Laturner
GUJ Expert
[Avatar]

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
[WWW]
Marcio Duran
GUJ Master
[Avatar]

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
[WWW]
gomesrod
GUJ Ranger
[Avatar]

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
bKn
Java Ninja

Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline

Não vejo utilidade nisso, javadoc é suficiente.
Tchello
GUJ Master
[Avatar]

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.

Alexandro.Almeida
JavaBaby
[Avatar]

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
[MSN]
Juk
JavaChild
[Avatar]

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
Tchello
GUJ Master
[Avatar]

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.
mochuara
GUJ Master
[Avatar]
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?
Mero_Aprendiz
JavaEvangelist
[Avatar]

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

sergiotaborda
GUJ Expert
[Avatar]

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
[WWW]
mochuara
GUJ Master
[Avatar]
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.
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team