|
|
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
|