Conceitos de AOP explicados para o manequim


19

Alguém pode explicar os conceitos de AOP para manequins: ponto de união, corte de ponto, tecelagem etc.

Por exemplo: Aspecto: uma modularização de uma preocupação que abrange várias classes. O que isso significa?

Respostas:


15

Pense em uma preocupação como um grupo de funcionalidade, por exemplo, registro, auditoria, segurança

Essas funcionalidades estão sempre presentes na maioria dos códigos, mas na verdade não vivem em nossas classes de animais-> cães - são funcionalidades que devem viver em muitas classes - são preocupações transversais .

  • Um ponto de junção é um local no código em que o código do aspecto é realmente executado.

  • Um pointcut é como dizer qual código é executado no ponto comum.

  • Tecelagem - é quando o compilador / sistema pega seu código normal e inclui todo o código AOP para que ele desencadeie o código correto etc. - pode pensar nisso como uma etapa extra de pré-compilação.

Um exemplo simples e compreensível é:

  1. Queremos rastrear todas as chamadas de método para fins de depuração (ou seja, queremos ver quais métodos são chamados em que ordem).
  2. Criamos um aspecto que registra o nome do método quando ele é chamado
  3. Criamos pointcuts que associam o aspecto a todos os métodos no código. Na maioria das estruturas de AOP, você pode fazer isso facilmente com alguns curingas
  4. Agora temos o log de todos os métodos já chamados.

Esteja ciente de que a terminologia difere um pouco entre diferentes implementações e estruturas de AOP.


Assim como eu estava escrevendo minha resposta longa! O seu é mais conciso, eu gosto. Irá editá-lo leve para maior clareza.
Martijn Verburg

Obrigado, eu deveria aprender as regras de formatação, continue esquecendo.
Jonno

Parece que isso seria simples de implementar com decoradores Python ou macros Lisp- S / N?
Paul Nathan

@ Paul - não estou familiarizado com nenhum construto que você mencionou, eu tenho medo e um google rápido não me deu informações suficientes para responder de qualquer maneira.
217 Jonno

@PaulNathan: AOP é bem simples em idiomas dinâmicos. Uma estrutura simples de AOP pode ser criada em uma tarde. Em linguagens compiladas como Java, a vida não é tão agradável.
kevin Cline

-1

Leia em sequência

Cada definição se baseia nas anteriores.

Preocupação transversal

Algo que incomoda (preocupa) em todos os lugares (transversal) em seu aplicativo. por exemplo, registro ou segurança

Aspecto

Um pedaço de código que é adicionado automaticamente antes , depois ou ambos ( ao redor ) do código existente

PointCut & JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Pointcut

Um local na execução do código onde parte do aspecto é executada.

JoinPoint

O ponto em que seu aspecto "se une" ao corte de ponto. Em um joinPoint "antes", você terá acesso aos parâmetros; em "joinPoint", após, você terá acesso ao valor de retorno. Se uma exceção for lançada, você pode precisar de um "try-catch-finalmente" para manipular ou lançar novamente.

Tecelagem

O processo de adicionar aspectos em torno de um pointcut


Quem votou na minha resposta, por favor, deixe um comentário do motivo - se você não se importa. Eu prometo que não vou iniciar uma discussão sobre isso. Gostaria, no entanto, de saber o que poderia ter feito melhor. Obrigado!
Prashant
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.