Pergunta

Eu entendo programação orientada a objeto, e têm escrito programas OO por um longo tempo. As pessoas parecem falar sobre programação orientada a aspectos, mas eu nunca realmente aprendi o que é ou como usá-lo. Qual é o paradigma básico?

Esta questão está relacionada, mas não chega a pedi-lo:

Programação vs. Programação Orientada a Objetos Orientada a Aspectos

Foi útil?

Solução

AOP aborda o problema da transversais preocupações , o que seria qualquer tipo de código que se repete em diferentes métodos e normalmente não podem ser totalmente reformulado em seu próprio módulo, como com o registo ou verificação. Assim, com AOP você pode deixar essas coisas fora do código principal e defini-lo verticalmente assim:

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

E, em seguida, um aspecto-tecelão é usado para compilar o código para isso:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 

Outras dicas

Infelizmente, parece ser surpreendentemente difícil de fazer AOP realmente útil em uma organização de tamanho médio-grande normal. (Suporte Editor, senso de controle, o fato de que você começar com as coisas não tão importantes que conduz ao código-rot, as pessoas vão para casa com suas famílias, etc.)

Eu coloquei as minhas esperanças para programação orientada composta , que é algo mais e mais realista. Ele se conecta a muitas idéias populares e dá-lhe algo muito legal.

Olhe para uma vinda para cima e implementação aqui: qi4j.org/

PS. Na verdade, acho que uma das belezas com AOP é também o seu calcanhar de Aquiles: a sua não-intrusivas, as pessoas deixando ignorá-lo, se puderem, por isso vai ser tratada como uma preocupação secundária na maioria das organizações

.

Copiado de uma duplicata para a completude (Einstein):

Os exemplos clássicos são a segurança e registro. Em vez de escrever código dentro de sua aplicação para registrar ocorrência de x ou cheque objeto z para controle de acesso de segurança há uma engenhoca linguagem "fora da banda" de código normal que pode segurança sistematicamente injetar ou exploração madeireira em rotinas que não nativly tê-los em de tal forma que mesmo que o seu código não fornecê-la -. seu cuidado

Um exemplo mais concreto é o sistema operacional fornecendo controles de acesso para um arquivo. Um programa de software não precisa verificar se há restrições de acesso porque o sistema subjacente é que isso funciona para ele.

Se você acha que precisa AOP na minha experiência que você realmente realmente precisa investir mais tempo e esforço em gestão de meta-dados apropriado dentro de seu sistema com foco em bem pensado design de sistemas / estrutural.

Copiado de Spring in Action

AOP é geralmente definido como uma técnica que promove a separação de preocupações em um sistema de software. Sistemas são compostos de vários componentes, cada um responsável por uma parte específica de funcionalidade. Mas muitas vezes esses componentes também carregam responsabilidades adicionais além da sua funcionalidade núcleo. serviços do sistema, tais como a exploração madeireira, gerenciamento de transações e segurança, muitas vezes encontrar seu caminho em componentes cujas responsabilidades núcleo é outra coisa. estes sistema serviços são comumente referidas como preocupações transversais porque eles tendem a corte em vários componentes em um sistema.

Copiado de uma duplicata para a completude (Cigarra):

Classe e atributos método em .NET são uma forma de programação orientada para o aspecto. Você decorar suas classes / métodos com atributos. Nos bastidores esta adiciona código para sua classe / método que executa as funções específicas do atributo. Por exemplo, marcando um seriável classe permite que ele seja serializados automaticamente para o armazenamento ou a transmissão para um outro sistema. Outros atributos podem marcar determinadas propriedades que não serializável e estes seriam automaticamente omitidos do objeto serializado. Serialização é um aspecto, implementado por outro código no sistema, e aplicado a sua classe pela aplicação de uma "configuração" atributo (decoração).

Há um exemplo de AOP, que costumava Primavera AOP como um exemplo. O exemplo é bastante fácil de entender.

Spring AOP (programação orientada para o Aspecto) quadro é usado para modularize preocupações transversais em aspectos. Colocá-lo simples, é apenas um interceptor para interceptar alguns processos, por exemplo, quando um método é executado, Primavera AOP pode seqüestrar o método de execução e adicionar funcionalidades extras antes ou após a execução do método.

Referência: http://www.mkyong.com/spring/spring -aop-exemplos do conselho /

AOP pode ser usado para executar ações que não estão relacionadas com a lógica de negócios do seu aplicativo, tais como a exploração madeireira, caching, etc. Essas ações podem ser colocados em uma parte separada do seu aplicativo e, em seguida, reutilizados em todo o aplicativo. Normalmente existem duas maneiras de se conseguir isso. Injetando código automagicamente por um pré-processamento antes / depois de um método, ou colocar as classes proxy que intercepta uma chamada de método e pode então executar as coisas antes / depois de uma chamada de método.

Aqui está um exemplo em .Net. Ele usa classes de proxy para interceptar chamadas de método e executar código antes de depois de chamadas de método Saif.

Aspect Oriented Programming (AOP) em .NET core e C # usando Autofac e DynamicProxy

AOP é uma forma de melhor modularizar seu pedido de funcionalidade que se estende por vários limites. AOP é outra maneira de encapsular esses recursos e siga Individual Responsiblity movendo estas preocupações transversais (logging, tratamento de erros, etc.) fora dos principais componentes de sua aplicação. Quando usado adequadamente AOP pode levar a níveis mais elevados de manutenção e extensão em sua aplicação ao longo do tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top