[quote=lorena.dourado][quote=urubatan][quote=lorena.dourado]
AOP - Arquitetura Orientada à Aspectos
OOP - Arquitetura Orientada à Objetos (A conhecida por todos nós, creio eu…)
SOA - Arquitetura Orientada à Serviços
[/quote]
Acho que você precisa ler um pouco mais …
Você esta comparando bananas com carros
AOP = Aspet Oriented Programming = Programação Orientada a Aspectos
OOP = Object Oriented Programming = Programação Orientada a objetos
SOA = Service Oriented Arquitecture = Arquitetura Orientada a Serviços
AOP é comummente utilizada junto com OOP para contornar limitações do Java por exemplo
SOA sim é uma arquitetura e não tem nada a ver com as outras duas[/quote]
Amigos,
Não estou comparando ninguém! Quero apenas saber a experiência de vocês com relação as arquiteturas AOP, OOP e SOA…
Saber as dificuldades que cada um encontrou utilizando essas arquiteturas!
Abraço a todos,
[/quote]
Lorena, não tem como alguém fazer uma explanação sobre algo equivocado. Acho que aqui caberia prestar um pouco de atenção, pois após a explicação dos amigos, você ainda persistiu no erro.
Acho que vale reforçar seus conceitos sobre o que é Arquitetura Orientada a Componentes, Arquitetura orientada a serviços. Isso não tem haver com paradigmas de programação , poderia ter um serviço exposto através de programação procedural, sem nada de OOP.
http://scaphe.wordpress.com/2006/08/19/soa/
Quanto à AOP - Orientação a Aspectos, essa visa interesses ortogonais , retirar do código da sua aplicação o que não faz parte necessariamente da construção do seu business e estão ali para cumprir outras funções, como Log, Segurança.
Só para salientar, quando se utiliza o framework de segurança Acegi juntamente com o Spring, você está exatamente fazendo isso, retirando da sua implementação direta e abstraindo através de Aspectos.
Os aspectos como disse o Urabatan, são complementos da OOP, que acabam dando ao java habilidades de manipulação baseada em MOP - MetaObject Protocols - http://www2.parc.com/csl/groups/sda/projects/mops/default.html. Aqui deixar claro que não se trata de uma implementação MOP e sim baseada em alguns conceitos !! Isso é uma longa discução e foge do tópico , para saber um pquinho mais - http://c2.com/cgi/wiki?AspectsAndMetaObjects
Dificuldade está na curvatura de aprendizagem de utilizar um framework como AsjpectJ ou JBoss AOP entre muitos outros que estão no mercado. Entretanto seus benefícios são grandes, principalmente em delegar algumas fases como segurança para depois e adicionar o aspecto à aplicação. Diria que apesar de muitos evidenciarem a qualidade do código, por não torná-lo spaghetti, evidenciaria o time-to-marketing, pois poderia separar bem as funções na equipe e cada um se preocupar somente com o que interessa de fato.
Por fim você fez uma pergunta meio esquisita: [quote]Elas estão ligadas a o que, produtividade, padronização?! [/quote]
Então vale à pena esse reforço no entendimento.
Para tentar simplificar pensem em :
AOP - Para retirar os interesses ortogonais do meu código e não torná-lo um spaghetti.
OOP - Abstração ao mundo real ( ao menos deveria ser
)
SOA - Exposição de algo que você criou como serviço.
Então sobre as dificuldades, AOP existe de curvatura, entender os pointcuts da vida, como funcionam os frameworks, mas depois de entendido isso é bem tranquilo e hoje muitos Frameworks e partes das soluções já utilizam AOP nos seus bastidores, como Spring e seu controle de transações.
SOA - você precisa pensar no que vai expor e como vai fazê-lo. Aqui realmente exige planejamento, quais tratativas vai utilizar, pois existem mutias formas de fazê-lo, segurança entre outras questões.
Aconselho duas literaturas - Tomas Erl e Restful WebServices para entender como conceitos e evolução.