Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 21364|Resposta: 1

[Fonte] .net/C# usa Attributes para implementar AOP simples

[Copiar link]
Publicado em 18/04/2017 14:54:11 | | |

Vamos começar com um pedaço simples de código:



Então, digamos que seja um programa web, queremos checar a sessão primeiro, depois as permissões, iniciar uma transação, escrever um log, depois executar a operação em si e, por fim, escrever um log. Obviamente, não podemos escrever todas as chamadas de método para as operações acima em DoSomething(), então o código vai se tornar uma grande porcaria, então o que devemos fazer?

Existem muitas formas de implementá-lo, como usar frameworks como o spring, mas em projetos reais não é possível introduzir um framework de forma casual, e muitas vezes precisamos escrever alguns mecanismos por conta própria.

Aqui penso no Filter no MVC, desde que você coloque uma tag de atributo no Controller ou Action, pode fazer outras coisas antes e depois da execução do método. Então, vamos simplesmente simular uma implementação de filtro.

Primeiramente, o método original foi transformado em uma forma elegante de etiquetas de recursos:




Com as feature tags, devem existir classes correspondentes a feature tags, assim como implementações AOP, que podem ser contidas independentemente em um arquivo ou assembly.

Primeiro, o rótulo associado ao método, implementado como vazio:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
classe pública lacrada MyInterceptorMethodAttribute : Atributo { }
Depois disso, defina o rótulo a ser associado à classe:




Aqui está uma classe MyAopHandler definida, implementada da seguinte forma:




Note que a parte específica da operação do código acima é equivalente a uma "classe proxy", que essencialmente muda o contexto da execução do método. Estruturas de programas orientadas a objetos, como delegados, podem ser usadas para expor a implementação específica ao mundo exterior para desenvolvimento secundário.




Anterior:ES5, ES6, ES2016, ES. Próximo: O que está acontecendo com a versão do Javascrip{filter}t?
Próximo:Tutorial de Início do PowerShell - versão v0.3
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com