Tenho uma aplicação para fazer, e ela será feita em Struts. Até ai ok, o problema é que não queria deixar ela dependente do struts desta forma teria uma estrutura mais ou menos assim:
Nas Actions do Struts eu apenas repassaria minha meus objetos, como request, e outros, pegando seus valores (K,V) e mandando para meu Controller dentro de um Hashmap. Até ai eu acho que vai funcionar tudo legal.
O maior problema que encontrei a princípio foi no quesito Form, como posso associar um Form (Business object) as actions, e tudo mais, sem que eles extendam de ActionForm, pq o Struts não deixa associar forms a actions se estes não extenderem de ActionForm (ou derivados), porém eu não qeuria essa dependencia.
Futuramente gostaria de apenas trocar a parte de View dessa aplicação, por exemplo usar Swing, sem precisar assim reimplementar nada, apenas chamando meus Controllers… etc etc…
Alguém tem uma idéia de como poderia fazer isso? Ou melhorar essa Arquitetura??
WebWork proporciona mais facilidade pra fazer isso que voce quer. As actions sao mais “neutras”, digamos assim… - isso qualquer um percebe brincando vinte minutos com o WebWork. Tenta e veja se te atende.
Seu texto demonstra de forma clara porque usar Struts é démodé ou old fashioned. Então a resposta sobre como melhorar a arquitetura também é absolutamante clara: pular fora do Struts.
Atitudes “esquerdistas” à parte (sem trocadilhos destro )…
Kuchma: Com o WebWork consigo associar um Form criado por mim, a uma Action, sem precisar extender de algum padrão do framework??
Luca: e qual sugeriria?
A solução do Destro foi interessante, e simples (como num pensei nisso)… é de se pensar. Thanks destro!
Desculpe a pergunta direta, sem uma pesquisa antes, mas o tempo para pesquisar e aprender coisas novas anda muito restrita ultimamente.
Antes de mais nada, as actions do webwork são completamente independentes dos objetos HttpRequest e Response. Ou seja, são classes que podem ser perfeitamente reutilizadas. Você pode até mesmo utilizá-las ao mesmo tempo por dois clientes completamente diferentes, como por exemplo as páginas web e classes internas
Não sei se é exatamente isso que você precisa, mas:
public class MinhaAction extends ActionSupport
{
public Pessoa pessoa;
public String execute()
{
//...
dao.save( pessoa );
return SUCCESS;
}
public Pessoa getPessoa()
{
return pessoa;
}
public void setPessoa( Pessoa p )
{
pessoa = p;
}
}
class Pessoa()
{
private String nome;
private String endereco;
private ClasseDeComposicao composicao;
}
<form action="minhaction"> // isso precisa ser configurado direito
<input name="pessoa.nome" value="lipe"/>
<input name="pessoa.endereco" value="rua pirapora"/>
<input name="pessoa.composicao.outraPropriedade" value="tada"/>
</form>
Pronto
Isso sem contar no suporte muito bom a IoC que o WW tem. Vale a pena dar uma lida no tutorial do smota, pelo menos para conhecer a alternativa.
Eh isso ai. Eh um tempo que vale a pena, pois ele eh simples de se aprender e, na pior das hipoteses, voce conhece uma maneira alternativa (e melhor, na opiniao de muita gente) de se fazer as coisas.
obrigado a todos =) (/me Vencido) Vou tirar esse tempo para aprender o WW já que ele vai ser a solução para todos meus problemas! =)
Thank you all!
ps: se eu tivesse seguido aos conselhos de minha mãe “Filho aprenda WW que vai ser bom para seu futuro”, mas nãooooo eu tinha que querer ser o rebelde! =)
hehehe
Arquiteturas não podem ser feitam sem de alguma forma pensar na infra e frameworks que vão viabilizá-la. Logo é meio impossivel criar uma arquitetura realmente independente de alguns componentes chaves, como fw web com front-controler ou base relacional. Essa arquitetura em algum ponto vai ‘vazar a abstração’ pro suporte dela.
mas o meu problema era justamente em poder reutilizar meu código em um sistema Web, e em um sistema J2SE. E pelo que o pessoal falou o WebWork me permite isso…
Não estudei a fundo ainda o WebWork, mas espero que seja isso mesmo.
jujo, entenda que o objetivo de um framework é resolver problemas comuns. Apenas isso.
Um exemplo simples é o problema do web.xml. Ter que declarar cada servlet nele é uma porcaria, além de feder a peixe. Então uma solução comum é ter um servlet que atende a qualquer url dentro do contexto dele, pega o texto e dispacha para o servlet correto.
http://localhost:8080/minhaApp/ServletHelloWorld
public class DespachadorDeServlets
{
public void despachar() throws Exeption
{
// pega a string correta
String servletName = "ServletHelloWorld";
// de algum arquivo de configuração, pega o nome da classe do
// servlet a partir do servletName
Class servlet = Class.forName( servletName ).newInstance();
// etc
}
}
[quote=LIPE]
Um exemplo simples é o problema do web.xml. Ter que declarar cada servlet nele é uma porcaria, além de feder a peixe. Então uma solução comum é ter um servlet que atende a qualquer url dentro do contexto dele, pega o texto e dispacha para o servlet correto.[/quote]
E, dependendo da solução, configurar um outro XML com um milhão de actions, forwards, beans, formbeans… :roll:
[quote=louds]jujo, acho que você está confundindo independência de framework e de UI.
[/quote]
Ahn… vc pode ter me entendido mal, ou eu ter me explicado mal.
Mas a idéia, é poder escolher qual FrameWork usar, sem precisar reescrever o Core da minha aplicação.
ahn… digamos que eu tenha um login, esse login, chama uma Action, que simplesmente repassa tudo para o meu “Controller de login” o qual faz tudo o que precisa fazer, e retorna alguma coisa… Assim, eu não me importo, se essa Action, recebe requests, ou o caraleo a 4… simplesmente repasso tudo o que for preciso e mando para a “minha aplicação” processar.