Arquitetura independente de Framework

Olá pessoal,

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:

(MeuController -> BusinessObject -> Command -> DAO).

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??

Abraços!

Obrigatoriamente tem que usar Struts?

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. :smiley:

Marcio Kuchma

Olá

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.

[]s
Luca

Uma solução ad hoc nos ActioForm seria fazer assim:

public class SeuForm extends ActionForm { private SeuDTO dto; //get e set }

No JSP:

<html:text name=“seuForm” property"dto.umAtributoDoDto" />

yelloww! =)

Atitudes “esquerdistas” à parte (sem trocadilhos destro :wink: )…
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? :wink:

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.

Até mais!

Respondendo pelo Kuchma:

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 :smiley:

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;
}

&lt;form action="minhaction"&gt; // isso precisa ser configurado direito
    &lt;input name="pessoa.nome" value="lipe"/&gt;
    &lt;input name="pessoa.endereco" value="rua pirapora"/&gt;
    &lt;input name="pessoa.composicao.outraPropriedade" value="tada"/&gt;
&lt;/form&gt;

Pronto :smiley:

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. :smiley:

Marcio Kuchma

Hello there!

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

Abraços!

opa… achei que esse material relatado eu fosse encontrar aqui no GUJ.

Onde está esse material do SMOTA??? WTF is this guy?!

Cya!

Sou eu mesmo … algum problema? :shock:

Ops, eheheh to brincando … tá aqui no GUJ sim … aqui:
http://www.guj.com.br/java.artigo.135.1.guj

Mas no GUJ tb tem outro …
http://www.guj.com.br/java.artigo.152.1.guj

Thank you!

:wink:

Por falta de um, temos dois! :smiley:

http://www.guj.com.br/java.artigo.152.1.guj
http://www.guj.com.br/java.artigo.135.1.guj

(editado: isso que da sair 5min da mesa antes de postar no GUJ :mrgreen: )

Marcio Kuchma

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.

Ahn?! não entendi muito bem…

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.

Abraços!

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:

pois é, por isso a campanha continua

save the seals :smiley:

:?

ahn… não entendi!?
Eu não questionei mais nada… não estou discutindo a utilidade dos frameworks… não entendi o post do Lipe…

anyways… Thanks!

jujo, acho que você está confundindo independência de framework e de UI.

Foi só um comentário #.#

shoes :smiley:

[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.

sei lá se deu pra entender agora =)

LIPE :wink:
valew

Abraços!