Refatoracao - Ajuda / Ideias  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Estou aceitando dicas / sugestoes em relacao a refatoracao de codigo. O problema basicamente o seguinte: atualmente, no JForum, o codigo que lida com a logica de listar / inserir / editar etc esta nas Actions, depedente de um request. O que eu quero eh separar o maximo de codigo que for possivel, afim de torna-lo facil de usar em outros ambientes, que nao precisam necessariamente ser HTTP.

A primeira coisa que me vem a cabeca eh colocar o codigo de logica em uma classe comum, e passar os dados que ela vai precisar via metodo / setter / construtor. Mas o meu medo eh que, como pode haver n parametros (10 eh um numero comum), a chamada ao metodo ficaria um tanto.. hmm.. fora do comum.

Exemplificando, eis o metodo atual que atualiza uma entrada do Favoritos:



Nesse simples codigo, ha 4 parametros que vem do request: bookmark_id, title, description e visible. Desacoplando usando a abordagem citada anteriormente, o novo codigo seria algo como





Ficaria algo assim.. O que acham? sugestoes sao mais do que bem vindas!

Rafael

This message was edited 1 time. Last update was at 25/03/2005 02:24:42


"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
pcalcado
Moderador
[Avatar]

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

Oi,

Que tal um Introduce Parameter Object com um objeto próprio? Ou um Map mesmo...


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]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Hm.. ao meu ver, somente justificaria usar esse se o numero de parametros a passar fosse muito grande, e nao relacionados. O http://www.refactoring.com/catalog/preserveWholeObject.html me pareceu mais interessante para determinados casos - como esse do autalizar o Favoritos.

O inserir / editar mensagem precisa de bastate coisa coisa - praticamente todos os dados contidos na classe Post, como id do forum, id do topico, o texto em si e as opcoes de formatacao. Se tiver alguns (poucos) a mais, seria ok passar eles como argumentos "simples"? ... ou mesmo fazer "meio-a-meio", passando o que se encaixar em algum objeto ja existe e o resto - se for em um numero variavel - usarno o conceito do Introduce Parameter..

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Map, Map, Map!

Voce pode usar o mesmo truque que o WebWork usa pra copiar tudo do Request.getParameter() pra um Map, e partir dali. Outra coisa massa eh que usando o BeanUtils, voce pode copiar tudo de um Map pra um bean (entao a chave "user_id" vira user.setId(), e por ai vai)
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
pcalcado
Moderador
[Avatar]

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

cv wrote:Map, Map, Map!


Eu até costumo usar maps nesse tipod e situação, mas a questão de não ter tipagem (e logo a juda do compilador) semrpe me deixa mal... antes dos Generics, claro

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]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

cv wrote:Map, Map, Map!

Voce pode usar o mesmo truque que o WebWork usa pra copiar tudo do Request.getParameter() pra um Map, e partir dali. Outra coisa massa eh que usando o BeanUtils, voce pode copiar tudo de um Map pra um bean (entao a chave "user_id" vira user.setId(), e por ai vai)


Como a resposta foi colada com a minha, fica a mesma pergunta feita apos a resposta do philip: usar algo assim mesmo quando boa parte dos parametros pode ser passada usando algum objeto ja existente? (duh, me parece meio logico isso, mas .. )

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
ronaldtm
Entusiasta Java

Membro desde: 03/11/2004 19:33:21
Mensagens: 22
Localização: Brasília - DF
Offline

Pra algumas coisas, dá pra usar TOs (Transfer Objects), não?

Eu sei que muita gente acha que TOs são um anti-pattern, mas eu acho que eles são bem úteis nesses casos, onde você basicamente passa todos os dados de uma 'entidade' como parâmetro.

Claro que não dá pra bitolar e criar TOs pra todas as chamadas de métodos , mas pra essas do tipo save() e update() eles caem como uma luva.

This message was edited 1 time. Last update was at 25/03/2005 10:40:37


"In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about 'how' to shape things either." (Christopher Alexander)
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Se alguem quiser ter uma ideia melhor do "problema", eis uma classe interessante:

https://jforum.dev.java.net/source/browse/jforum/src/net/jforum/view/forum/UserAction.java?rev=1.35.2.2&only_with_tag=NewDAO&view=markup

o metodo insertSave() eh um que precisa duma refatoracao, mas todos de uma maneira geral necessitam..

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

como o ronald falou, acho TO legal, soh que ai voce muda de push pra pull.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team