Frameworks para POA

11 respostas
tnaires

Pessoal,

Tenho verificado alguns frameworks AOP, e tenho dúvidas em ver qual seria o melhor.

Dynaop: nos tópicos que pesquisei aqui no GUJ, esse foi muito bem falado. Mas fui no site <a href="https://dynaop.dev.java.net/">https://dynaop.dev.java.net/</a> e vi que a versão mais recente ainda é beta e data de 2004;

Aspectwerkz: também é bem falado, mas fui no site <a href="http://aspectwerkz.codehaus.org/">http://aspectwerkz.codehaus.org/</a> e vi que a versão mais atual é de 2005;

AspectJ: o mais “detonado” pela galera, mas o único que ainda é mantido com freqüência ( o último release é desse ano ).

E aí, o que vocês acham? Ainda vale a pena aprender aspectos hoje em dia? Se sim, qual framework seria o ideal, levando em conta praticidade, facilidade e continuidade do projeto?

Abraços

11 Respostas

tnaires

Neste link tem outros frameworks, mas vários deles acredito que estão descontinuados:

Mauricio_Linhares

O AspectJ é o mais detonado? Por quem?

tnaires

Dentre os frameworks que citei no primeiro post, o AspectJ foi o mais criticado no GUJ por vários fatores:

  • sintaxe ( um pouco ) complicada;
  • utilização de uma ferramenta extra;
  • implementação intrusiva ( mixin de código ).

Inclusive, Maurício, você mesmo chegou a criticar o AspectJ uma vez.

Abraços

Mauricio_Linhares

Hahahahahahha!

:lol:

Tem que ter cuidado mesmo com o que se fala :stuck_out_tongue:

Seguinte, a minha crítica não foi exatamente ao AspectJ, pra mim ele continua sendo a melhor ferramenta de AOP que eu já mexi na vida, a crítica é que a falta de opções e ganchos na própria linguagem torna o uso de uma ferramenta de AOP necessária, se você tem uma linguagem com muitos ganchos ( em chamadas de métodos, construtores, resolução de nomes e todo aquele blablablá do tópico de monkey patching ) você dificilmente ia usar uma ferramenta de AOP, porque tudo o que a ferramenta de AOP faria, a sua linguagem já faz.

Resumindo, boas linguagens já tem as construções de AOP dentro delas, elas não precisam de nada externo nem novos nomes ou paradigmas pra fazer isso.

Mas estando em Java, AspectJ é a melhor escolha, eu, pessoalmente, acho a sintaxe dele extremamente clara, especialmente se você não usar aquelas aberrações que são os aspectos com annotations, acho que a sintaxe do AspectJ pura é simples e concisa o suficiente pra não dar trabalho a ninguém. É óbvio que existe o custo de se aprender uma coisa nova, mas sempre vai haver. Sobre o mixin, Java é estaticamente tipada, tudo tem que ser feito assim ou com classes proxy, a vantagem de se fazer como o AspectJ faz, que é metendo código na sua classe, é que você não tem o overhead da reflexão que você teria em outras bibliotecas que fazem uso de CGLIB.

tnaires

Maurício Linhares:
Hahahahahahha!

:lol:

Tem que ter cuidado mesmo com o que se fala :P


:lol: :lol:

Maurício Linhares:
Seguinte, a minha crítica não foi exatamente ao AspectJ, pra mim ele continua sendo a melhor ferramenta de AOP que eu já mexi na vida, a crítica é que a falta de opções e ganchos na própria linguagem torna o uso de uma ferramenta de AOP necessária, se você tem uma linguagem com muitos ganchos ( em chamadas de métodos, construtores, resolução de nomes e todo aquele blablablá do tópico de monkey patching ) você dificilmente ia usar uma ferramenta de AOP, porque tudo o que a ferramenta de AOP faria, a sua linguagem já faz.

Resumindo, boas linguagens já tem as construções de AOP dentro delas, elas não precisam de nada externo nem novos nomes ou paradigmas pra fazer isso.

Mas estando em Java, AspectJ é a melhor escolha, eu, pessoalmente, acho a sintaxe dele extremamente clara, especialmente se você não usar aquelas aberrações que são os aspectos com annotations, acho que a sintaxe do AspectJ pura é simples e concisa o suficiente pra não dar trabalho a ninguém. É óbvio que existe o custo de se aprender uma coisa nova, mas sempre vai haver. Sobre o mixin, Java é estaticamente tipada, tudo tem que ser feito assim ou com classes proxy, a vantagem de se fazer como o AspectJ faz, que é metendo código na sua classe, é que você não tem o overhead da reflexão que você teria em outras bibliotecas que fazem uso de CGLIB.


Gostei da sua opinião. Pelo menos me fez ver que o que eu tenho estudado esse mês não foi perdido :smiley:
Por exemplo, Ruby. Ainda não conheço a linguagem a fundo por isso vou perguntar: há a necessidade de implementar orientação a aspectos nela? Sei que tem o Aquarium, que me pareceu bem legal.

Aldrin_Leal

Só pra constar: O AspectWerkz fazia Weaving Dinâmico, e o AspectJ, estático.

O Werkz acabou incorporato pelo AspectJ. Simples, assim…

T

Então, pergunta: A abordagem do Spring para AOP não é suficiente para a maioria dos casos? Porque usar algo como aspectJ quando vc tem algumas abstrações do tipo no Spring? (é somente uma dúvida,r s não conheço o aspectJ dafundo para opinar ).

tnaires

Aldrin Leal:
Só pra constar: O AspectWerkz fazia Weaving Dinâmico, e o AspectJ, estático.

O Werkz acabou incorporato pelo AspectJ. Simples, assim…


Então o esquema de anotações existentes atualmente no AspectJ devem ter sido resultado dessa fusão correto?

Mauricio_Linhares

O Spring AOP sempre usa proxies e é bem mais restrito em funcionalidades.

Mauricio_Linhares

tnaires:
Gostei da sua opinião. Pelo menos me fez ver que o que eu tenho estudado esse mês não foi perdido :smiley:
Por exemplo, Ruby. Ainda não conheço a linguagem a fundo por isso vou perguntar: há a necessidade de implementar orientação a aspectos nela? Sei que tem o Aquarium, que me pareceu bem legal.

Ele é legal, mas muita coisa simples que você precisaria de aspectos em Java (como mixins, alterar classes apenas pro seu projeto) já está na linguagem e implementar algo como o Aquarium não é algo tão absurdamente complicado quanto implementar o AspectJ :slight_smile:

Alessandro_Lazarotti

Vale falar tbm que o AJDT é uma mão na roda.
Além de ter ajudar nas tarefas cotidianas da compilação com o weaver do AspectJ (tão transprarente quanto você salvar uma classe nas ides java e elas já serem compiladas), você tem uma opção de visualização das classes que mostra em diagrama com legendas quais classes estão sendo afetadas pelo aspecto.

Criado 12 de março de 2008
Ultima resposta 16 de mar. de 2008
Respostas 11
Participantes 5