Unica explicacao para nao querer atrelar nada a sua action seria porque vc esta codificando seu modelo de negocios DENTRO da action, o que eh totalmente errado.
A action nao eh codigo importante, na grande maioria das vezes eh apenas uma ponte para o modelo de negocios. E nada te impede de testar uma action, estando ela atrelada ou nao a uma classe pai. Isso jah foi mostrado, provado e discutido um milhao de vezes, mas enfim…
E um modulo de configuracao programatica nao existe para ser testado. Nao faz o menor sentido testar ele assim como nao faz o menor sentido testar um arquivo properties ou XML. :roll:
De novo. Action e Configuracao eh uma coisa. Modelo de negocios, DAOs e entidades sao outras completamente diferentes.
Action apesar de algo burro e simples, vc pode testar FACILMENTE E SEM QUALQUER PROBLEMA, mesmo que ela seja atrelada a uma classe pai.
ApplicationManager nao foi feito para ser testado, mas se o cara eh caxias entao ele pode testar tb e publicar um blog interessante sobre isso. “Como testar se sua configuracao tem bug!”
O problema do Struts nao era por que ele extendia uma BaseAction, eu e todos da comunidade sabemos que os problemas eram outros…
Mas eh um questao subjetiva, uma discursao sobre teoria e pratica.
Releia a parte de domínios acima, consulte a bibliografia ou pelo menos dê argumentos, por favor.
Segundo seu pensamento TDD é uma burrice sem tamanho, já que vai querer que você pense nas actions com testes antes de implementação. Além do que a grande vantagem em definir actions como POJOs é que você pode utiliza-las fora do framework, logo elas não rpecisam ser burras.
Se minha Action é um POJO, completamente testado e que nem sequer precisa seguir o padrão Command por que eu não posso simplesmente fazer minha aplicação web conversar diretamente com o Service Façade?
Ver resposta acima.
Claro, por exemplo testar uma Action Struts é muito fácil, inclusive por isso toda a comunidade java continua seguindo este modelo e rindo de coisas inúteis como o Spring.
O que esse tal módulo faz, afinal? Bind de componentes para nomes? Isso não é papel do container?
Para mim mais uma vez você está ignorando a evolução de anos de uma plataforma, voltando para uma característica que sempre foi um dos grandes problemas de EJB 1.x/2.x, Struts e todos os ‘frameworks de primeira geração’.
Toda essa teoria bonita vai ter um preco: complexidade.
Se vc quer criar uma aplicacao web totalmente desacoplada de qualquer framework e totalmente acoplada a um monte de annotations, se vc quer criar um modelo de negocios que por magica (magica = um monte de anotations e convencoes loucas) ele se torne uma aplicacao web, vc pode.
O que vc vai ganhar com isso alem de tirar onda com os amigos de que sua aplicacao eh a mais puritana possivel e segue os conceitos do livro de patterns de Michael Zimmerman e Oswald Anthony? Muito pouco! Isso na minha opiniao.
Vamos a pratica que eh o que interessa no final das contas, ou nao?
public class MinhaActionTotalmentePura {
public void execute() {
// como pego a session aqui dentro?
// como pego o application aqui dentro?
// como sei se o metodo foi POST ou GET ?
// Como faco se nao sei quais os parametros que virao, e preciso pegar a lista de todos os parametros e itinerar sobre eles?
}
}
Claro que dah para fazer tudo isso via magica, convencoes e annotations. Eu acho que o preco a pagar eh o aumento da complexidade e o que se ganha no final das contas eh pouco, visto que o seu modelo de negocios vai estar em outro lugar e nao ai dentro.
Mas isso eh apenas a minha opiniao e entendo e aceito que outras pessoas poderao pensar diferente. Estou apenas me apegando ao principio de que SIMPLICIDADE eh o mais importante. Outras pessoas nao necessariamente precisam concorda com esse principio.
Pelo menos foi legal ver que nao estou sozinho, que o Guice tb usa um esquema parecido de configuracao programatica.
Então, estou acompanhando essa discução e vi essas duas mensagens que vc postou… eu entendi errado ou vc disse na primeira que codificar o modelo de negócios dentro da action é errado e na segunda vc disse o inverso? Sem sacanagem, só não entendi mesmo… oque vc quis dizer na primeira e oque vc quis dizer na segunda?
Desdenhar um argumento com “teoria bonita” só mostra que não vale a pena continuar esse pseudo-debate.
Desprezar décadas de teoria de ciência da computação já é ridículo.
Ignorar o fato de que existem zilhões de ferramentas que fazem tanto sucesso que revolucionaram a maneira como as coisas são feitas (Spring, RoR, Hibernate, EJB 3, etc.) é simplesmente lamentável.
Chamar isso de complexidade sem qualquer argumento é simplesmente uma prova de que você nunca viu ou testou a fundo estas plataformas. Coloca SIMPLICIDADE em caps não vai trazer qualquer argumento ao debate alémd e chamar a atenção para uma não-verdade.
As suas perguntas no trecho de código mostram que ainda te falta compreender como as coisas funcionam em Injeção de Dependências (como eu obtenho recursos em DI?). Acreditar que uma action deve saber o que é POST ou GET é sintoma de incapacidade de abstração.
Como não foram dados quaisquer argumentos que não ‘isso é complexo, bobo e feio’ eu paro por aqui. Você é um desenvolvedor excelente, sérgio, mas cuidado com NIH, está atingido níveis patológicos.
“visto que o seu modelo de negocios vai estar em outro lugar e nao ai dentro.”
Eu quiz falar que o modelo de negocios vai estar encapsulado em outro lugar fora da action. Sua duvida eh pertinente sim, visto que isso eh meio ambiguo. Para melhorar poderiamos falar assim:
“a action usa o modelo de negocios mas nao o implementa. O modelo de negocios estah implementado fora da action e eh um codigo a parte e nao dependente/atrelado a nada do framework.”
Logo o meu ponto eh que a action eh burra e so faz chamadas para dentro do modelo. O modelo sim eh que eh a alma do negocio…
[quote=pcalcado]Desdenhar um argumento com “teoria bonita” só mostra que não vale a pena continuar esse pseudo-debate.
[/quote]
Nao desdenhei. Teoria eh teoria. Pratica eh pratica. Eu gosto mais da pratica. Gosto meu…
Nao desprezei, sou apenas contra muita teoria que na pratica nao se aplica ou acaba virando overkill. Famoso anti-pattern.
Nunca ignorei. Por que vc nao incluiu ai Struts 1, Tapestry, JSF, Seam, Wicket, WebWork, Spring MVC. etc? Quando o Mentawai surgiu em Junho/2005 alguns desses frameworks estavam em voga. Dos que vc falou apenas RoR eh um framework web, so que por azar em outra linguagem.
Quem tinha que argumentar era vc. Eu consigo fazer isso de maneira bem simples com o Mentawai. O meu ponto era que fazendo tudo via annotation, magica, metafisica, etc e tal fica bem mais chato e complexo. Vc poderia ter mostrado como se faz? Se eh simples vc deveria ter respondido com o pe nas costas, mas se vc preferiu responder assim, entao talvez nao seja tao simples.
Eu diria que nao. O time do Mentawai tem feito um excelente trabalho e o framework eh reconhecido por pessoas de gabarito. Se o cara do OpenSolaris falou que Spring + WebWork eh muito complexo e heavyweight e migrou o site dele para Mentawai, entao eu vou dar um voto de credibilidade para ele. (Mas complexo que um sistema operacional nao deve ser, neh?)
Deu um exemplo pratica e vc deixou eu e um monte de gente na duvida de como fazer.
Sera que os caras do Google fizeram esse Guice baseado em configuracao programatica como o Mentawai tambem nao compreendem isso? Fiquei feliz de ver que o Guice se parece bastante com o suporte do Mentawai a DI / IOC (pra quem estah chegando agora vejam a comparacao na primeira pagina do topico). Se estamos fazendo coisas parecidas com as coisas que o pessoal do Google estah fazendo, entao as chances sao boas de estarmos no caminho certo! (Ou nao? Eles viajaram e o GoogleAds feito com isso tem serios problemas?)
[quote=pcalcado]
Você é um desenvolvedor excelente, sérgio, mas cuidado com NIH, está atingido níveis patológicos.[/quote]
Obrigado! Vc tb como ficou visto pelos seus argumentos aqui. O seu problema acho que eh uma falta-de-vontade de dar o braco a torcer para o Mentawai. Algo assim: "vou usar toda a minha inteligencia e capacidade para desmerecer e desacreditar esse projeto’’.
Tudo bem. Sairao atritos porque eu tb gosto de argumentar. No final das contas acho que todos ganham com o debate.
Ja estou ate com vontade de implementar um suporte a actions sem interface e sem heranca. Nao porque eu esteja convencido de que esse eh o caminho, mas para ser menos um pedra a ser tacada no nosso projeto. Sendo opcional, mal nao pode fazer…
Eu so acho que voce deveria aceitar mais a opiniao alheia mentawai nao e o kill-framework e vc sabe disso (eu espero) . Entao relaxa e curta o momento.
Se eu tivesse esse seu pensamento negativo e derrotista realmente ele nao seria e nunca poderia ser o kill-framework. Esse seu comentario foi esquisito, mostrou uma certa preocupacao em jogar pra baixo. A melhor e mais honroso nesses casos eh ficar neutro, principalmente quando nao se apresenta nada melhor e goza-se com o pau dos outros: no caso qualquer outro framework.
Nada eh ou deve ser a palavra final, mas com os comentarios positivos que temos recebido em relacao ao framework, vemos que estamos fazendo um excelente trabalho. E isso apenas nos motiva a trabalhar mais, independente dessa sua vontade louca de ver a coisa pegar fogo. Jogar pra baixo para aparecer eh uma caracteristica pessima. Principalmente quando ela vem acompanhada de nenhum argumento. O Phillip quer ver o projeto fazer agua, mas pelo menos tem bagagem para argumentar e debater sobre tudo isso… Acho que o pessoal do GUJ estah gostando do debate… Ou vc prefere o help-desk?
Jogar pra baixo nao, apenas mostrar que voce as vezes eh chato pra caramba em aceitar o que os outros pensam.
Quanto a gozar-se com o pau dos outros … eh bom, e ainda eles me pagam beeeem pra isso
Minha praia nao eh frameworks web eu acho que a gente tem coisas mais interessantes pra se fazer do que ficar apenas dispachando actions pra la e pra ca.
Quanto a curtir o momento, me desculpe mas isso nao me impressiona.
Será que nao da pra acalmar com o Menta no topico?
A discucao devia ser com um framework de DI, nos sabemos que o Menta tem isso, mas ele nao tem esse proposito. Eu mesmo ja tentei desvincular a discucao aqui pra nao falar do Menta e sim do fremawork em si, mas nao adianta.
O brabo é que sempre que alguem fala mal do Menta tu coloca essa pagina do que as pessoas acham dele. Sinceramente eu respeito muito o trabalho do Menta e tu sabe disso, mas enche o saco esse negocio.
Gracas a Deus que eu posso colocar essa pagina neh… Pagina sobre o Lohis, Space4J, eu nao mostro, porque nao tem… Vc nao deveria ficar irritado com isso…
Foi mal se vc nao gostou da discussao, mas pelo numero de acessos acho que muita gente no GUJ gostou da discussao…
[quote=saoj][quote=fabgp2001]
O brabo é que sempre que alguem fala mal do Menta tu coloca essa pagina do que as pessoas acham dele.
[/quote]
Gracas a Deus que eu posso colocar essa pagina neh… Pagina sobre o Lohis, Space4J, eu nao mostro, porque nao tem… Vc nao deveria ficar irritado com isso…
Foi mal se vc nao gostou da discussao, mas pelo numero de acessos acho que muita gente no GUJ gostou da discussao…
[/quote]
O que irrita é seu egocentrismo, transformou isso aqui em mais um “tópico em que o Sérgio fica batendo na mesma tecla de como seu framework é maravilhosamente bem-feito e bla bla bla”. Parece uma necessidade muito grande de auto-afirmação. Fico me perguntando porque desenvolvedores de outros frameworks não fazem a mesma coisa que você faz.
Até um ponto a discussão estava interessante, discussões sobre pontos de vista sempre são interessnates.
Pelo q entendi o Guice é um framework DI, q não está acoplado a web, o qual utiliza annotations.
Então por um lado não tem muito o q comparar com o mentawai, pois este é totalmente integrado a web (request/response, actions, etc), se bem q eu gostaria de ver o DI do menta desacoplado da web … aí a comparação rolaria legal, rs